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

Проблема с программным определением роли (группы) пользователя

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



Зарегистрирован: 20.05.2009
Сообщения: 105
Откуда: Самара

СообщениеДобавлено: Вт 20 Мар 2012 21:04    Заголовок сообщения: Проблема с программным определением роли (группы) пользователя Ответить с цитатой

Здравствуйте!
Необходимо в модуле расширения определить, в какие группы входит пользователь, и соответственно - разрешать или запрещать те или иные действия. Интересно, что в версии 4.2 у меня все это работало, а при переходе на версию 4.4. незаметно перестало. Незаметно - в смысле, что обнаружилось это не сразу.
Список идентификаторов всех имеющихся в наличии ролей (то есть - групп) определяется хорошо. Всего их у нас 13. Проблемы начинаются, когда я пытаюсь определить список ролей (групп) в которые входит данный пользователь. Этот список ролей, как следует из Талмуда, должен возвращать метод IIngeoUser.RoleIDs, возвращаемое значение имеет тип OLEVariant. Каких-то properties, позволяющих узнать длину этого списка, я нигде не обнаружил, поэтому попылтался вычислить его по размеру возвращенного значения: sizeof(значение) div sizeof(TM2ID) но тут выяснилось, что sizeof всегда возвращает 16, что, во-первых, не кратно размеру типа TM2ID, а глевное - не зависит от числа групп, в которые входит пользователь! Само возвращаемое значение похоже на какой-то ID, но он не соответствует ни одному ID групп!
Что я делаю не так?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
APopov



Зарегистрирован: 19.06.2006
Сообщения: 347
Откуда: Самара

СообщениеДобавлено: Ср 21 Мар 2012 14:20    Заголовок сообщения: Ответить с цитатой

RoleIDs это массив строк
вот примеры похожего кода в вбскрипте и на делфи
Код:

const ingeoAdminGUID = "0"
const ingeoAdminUserID="000000000003"
const ingeoAdminRoleID="000000000004"

function CurrentUserIsAdmin()
   dim roles, i, aDB, fl, aID
   set aDB = Application.ActiveDB
   aID = aDB.LogonUserID

   if (aID=ingeoAdminGUID)or(aID=ingeoAdminUserID) then
      CurrentUserIsAdmin = true
   else
      roles = aDB.Users.UserFromID(aID).RoleIDS
      CurrentUserIsAdmin = true
      for i=0 to uBound(roles)
         if roles(i)=ingeoAdminRoleID then exit function
      next
      CurrentUserIsAdmin = false
  end if
end function

Код:

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;

_________________
ОАО "Самара-Информспутник",
инженер-программист Попов Артем


Последний раз редактировалось: APopov (Ср 21 Мар 2012 21:02), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Алексей Васильев



Зарегистрирован: 20.05.2009
Сообщения: 105
Откуда: Самара

СообщениеДобавлено: Ср 21 Мар 2012 19:08    Заголовок сообщения: Спасибо! Ответить с цитатой

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

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


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