powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Получение роли текущего пользователя
12 сообщений из 12, страница 1 из 1
Получение роли текущего пользователя
    #32104805
akorsun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет!
Кто-нибудь здесь знает, как получить роль под которой вошел текущий пользователь в триггере. Например, я зашел так:
connect my.gdb user MyUser password aaa role MyRole;
В триггере я хочу проверить, является ли пользователем членом роли MyRole?
Как я могу это сделать?
...
Рейтинг: 0 / 0
Получение роли текущего пользователя
    #32104873
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CURRENT_ROLE
...
Рейтинг: 0 / 0
Получение роли текущего пользователя
    #32105735
akorsun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет,
что-то так не получается, и в списке зарезервированных слов InterBase ничего похожего нет. Не могли бы Вы объяснить поподробнее?
...
Рейтинг: 0 / 0
Получение роли текущего пользователя
    #32107198
akorsun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите, плиз, ответ очень нужен! Неужели никто не знает?
...
Рейтинг: 0 / 0
Получение роли текущего пользователя
    #32107252
av
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет!
Получить роль, которая была указана при коннекте похоже нельзя. Но можно из системних таблиц считать все роли пользователя:

select rdb$user "User Name", rdb$relation_name "Role Name"
from rdb$user_privileges
where rdb$object_type = 13
and rdb$user = user;

Если у пользователей всего одна роль, то это и будет решением
...
Рейтинг: 0 / 0
Получение роли текущего пользователя
    #32107262
akorsun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К сожалению, у каждого пользователя не одна роль. :( Я уже думал об этом, но все равно спасибо.

Могу добавить, что так как ролей у меня всего 5,
у меня была идея сделать ХП возвращающую роль пользователя, вида
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
CREATE PROCEDURE  "GET_ROLE"  
RETURNS
(
  ROLENAME VARCHAR( 30 )
)
AS
BEGIN
  ROLENAME = 'ADMINROLE';
  EXECUTE PROCEDURE SYS_IS_ADMINROLE;
  WHEN ANY DO
  BEGIN
    ROLENAME='PAYROLE';
    EXECUTE PROCEDURE SYS_IS_PAYROLE;
    WHEN ANY DO   
    BEGIN
      ROLENAME='CLERCROLE';
      EXECUTE PROCEDURE SYS_IS_CLERCROLE;
      WHEN ANY DO
      BEGIN
         ROLENAME = 'NONE';
      END
    END
  END
END

где на процедуры SYS_IS_xxx были права на запуск только у ххх.
Но вот почему-то IB не заходит в блок WHEN ANY, а сразу ругается no permission итп.. Да и вариант мне этот не нравится с чисто теоретической точки зрения. Если ролей будет побольше, то это по-моему не выход.
Вот такие пироги. :(
...
Рейтинг: 0 / 0
Получение роли текущего пользователя
    #32107793
graa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Столкнулся с той же проблемой :). Только у меня ролей побольше будет - с десяток. А эксепшны, нафиг, я вообще не сторонник использования исключительных ситуаций в подобных целях.
Насколько я понял, ответ не найден?
...
Рейтинг: 0 / 0
Получение роли текущего пользователя
    #32107986
akorsun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К сожалению, решения пока нет :( И здешние пока молчат. :(
...
Рейтинг: 0 / 0
Получение роли текущего пользователя
    #32110029
akorsun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как-то безнадежно все очень кажется. Меня уже сроки поджимать начинают. Видимо придется эксепшенами делать, раз ничего красивого никто не знает. Тогда возникает такой ВОПРОС:
Может кто объяснит почему вариант с эксепшнами(см. выше) не работает?
То есть даже на таком простом коде в процедуре или в триггере:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
  ...
  EXECUTE PROCEDURE SYS_IS_ADMINROLE;
  WHEN ANY DO
  BEGIN
    ROLENAME='PAYROLE';  /*возвращаемый параметр*/ 
  END;
  ...

если пользователь не имеет прав доступа к процедуре SYS_IS_ADMINROLE, то
в блок WHEN ANY управление не передается, а возникает исключение - no permission. Хотя, насколько я понимаю, exception должен обрабатываться в WHEN ANY и дальше не проходить.
...
Рейтинг: 0 / 0
Получение роли текущего пользователя
    #32110554
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня на FB 1.0 все работает...
например
Код: plaintext
1.
select current_role,field1 from table1

в первом столбце выдает имя роли или "NONE" если нет
...
Рейтинг: 0 / 0
Получение роли текущего пользователя
    #32110577
AOSila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если так!

Заводишь таблицу в которой переписываешь всех пользователей по логинам в IB. кроме того можно там хранить личные настройки и всякую лабуду про пользователя,, и делаешь там поле ROLE или что то типа. При конекте правишь это поле ролью которой законектился юзерь. А в тригере считываешь.

Ясен перец что если несколько пользователей зайдут под одним логином но разной ролью работать будет не правильно.

P. S. На самом деле в FB 1.0 исть CURRENT_USER но до перехода на FB пользовал выше указанный вариант. База была маленькая пользователей мало проблем не было.
...
Рейтинг: 0 / 0
Получение роли текущего пользователя
    #32112174
akorsun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем.
Думаю для меня это стало последней каплей для перехода на Firebird.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Получение роли текущего пользователя
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]