| Предыдущая тема :: Следующая тема   | 
	
	
	
		| Автор | 
		Сообщение | 
	
	
		Алексей Васильев
 
 
  Зарегистрирован: 20.05.2009 Сообщения: 105 Откуда: Самара
  | 
		
			
				 Добавлено: Пт 02 Июл 2010 15:14    Заголовок сообщения: Как определить пользовательскую группу? | 
				     | 
			 
			
				
  | 
			 
			
				Собственно, нужно закрыть некоторым категориям (группам) пользователей возможность записи в таблицы, не являющиеся семантикой Ингео, поэтому в свойствах группы это не прокатит.
 
Из InGeoIntfs я понял, как можно получить идентификатор и имя пользователя, но принадлежность к группе (группам) - не понятно. Там еще есть список ролей, но что с этими ролями можно делать - тоже не понятно. | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		СергейТ
 
 
  Зарегистрирован: 17.06.2005 Сообщения: 44 Откуда: Новосибирск
  | 
		
			
				 Добавлено: Сб 03 Июл 2010 12:19    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Здравствуйте, я это делаю через проверку принадлежности пользователя к заданной роли.
 
 
 	  | Код: | 	 		          /// <summary>
 
        /// Проверяет принадлежность текущего пользователя к роли
 
        /// </summary>
 
        /// <param name="RoleName">Имя роли</param>
 
        /// <returns>Да или Нет</returns>
 
        public bool CheckUser(String RoleName)
 
        {
 
            string sUser = ingeoPanel.axIngeoMapXControl.Ingeo.ActiveDb.LogonUserID;
 
 
            IIngeoUser IU = ingeoPanel.axIngeoMapXControl.Ingeo.ActiveDb.Users.UserFromID(sUser);
 
 
            object mas = IU.RoleIDs;
 
 
            object[] masobj = (object[])mas;
 
 
            for (int i = 0; i < masobj.Length; i++)
 
            {
 
                IIngeoRole IR = ingeoPanel.axIngeoMapXControl.Ingeo.ActiveDb.Roles.RoleFromID(masobj[i].ToString());
 
 
                if (IR.Name == RoleName)
 
                {
 
                    return true;
 
                }
 
            }
 
 
            return false;
 
        } | 	 
  | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Алексей Васильев
 
 
  Зарегистрирован: 20.05.2009 Сообщения: 105 Откуда: Самара
  | 
		
			
				 Добавлено: Пн 05 Июл 2010 17:08    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Спасибо огромное! Оазывается, роль - это собственно говоря, группа и есть.
 
К сожалению, столь же изящно у меня не получилось, кое-то пришлось сделать по "рабоче-крестьянски" не обессудьте:
 
 
 	  | Код: | 	 		  
 
  function CheckUserIn(GroupName: string) : boolean; // проверка допуска пользователя
 
  var
 
    IngeoUser : IIngeoUser;
 
    i,c : integer;
 
    RID : TM2ID;
 
    ro : OLEvariant;
 
  begin
 
     with ActiveDB do begin
 
       c := Roles.Count;
 
       for I := 0 to c - 1 do with roles[i] do if GroupName=Name then begin RID:=ID; break end;
 
       IngeoUser := Users.UserFromID(LogonUserID);
 
       ro := IngeoUser.RoleIDs;
 
       c := sizeof(ro) div sizeof(TM2ID);
 
       for i := 0 to c-1 do if RID = ro[i] then begin result := true; exit end
 
     end;
 
     result := false
 
  end;
 
 | 	 
  | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		APopov
 
 
  Зарегистрирован: 19.06.2006 Сообщения: 347 Откуда: Самара
  | 
		
			
				 Добавлено: Пн 05 Июл 2010 18:50    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Вот вам еще код для работы ролями, мож пригодиццо
 
 	  | Код: | 	 		  
 
const
 
  ingeoAdminGUID = '0';
 
  ingeoAdminUserID='000000000003';
 
  ingeoAdminRoleID='000000000004';
 
 
function RoleOrUserIsAdmin(const InDB :IIngeoDb; const aID:string; isRole:boolean):boolean;
 
  var roles :OleVariant;
 
      i     :integer;
 
begin
 
  if (aID=ingeoAdminGUID)or(aID=ingeoAdminUserID)or(aID=ingeoAdminRoleID)
 
  then Result := true
 
  else
 
    if not isRole then begin //проверим роли пользователя
 
      roles := InDB.Users.UserFromID(aID).RoleIDs;
 
      Result := true;
 
      for i:=VarArrayLowBound(roles, 1) to VarArrayHighBound(roles, 1) do
 
        if SameText(roles[i], ingeoAdminRoleID) then exit;
 
      Result := false;
 
    end
 
    else Result := false;
 
end; | 	 
  _________________ ОАО "Самара-Информспутник",
 
   инженер-программист Попов Артем | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		 |