Список форумов www.integro.ru www.integro.ru
ЦСИ ИНТЕГРО
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Как определить пользовательскую группу?

 
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков
Предыдущая тема :: Следующая тема  
Автор Сообщение
Алексей Васильев



Зарегистрирован: 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;
        }
Вернуться к началу
Посмотреть профиль Отправить личное сообщение MSN Messenger
Алексей Васильев



Зарегистрирован: 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;

_________________
ОАО "Самара-Информспутник",
инженер-программист Попов Артем
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков Часовой пояс: GMT + 5
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете добавлять приложения в этом форуме
Вы можете скачивать файлы в этом форуме


© phpBB Group
Русская поддержка phpBB