Есть сервер в котором зарегистрированы n пользователей. Есть некая база данных с которой они должны работать. В базе данных задано несколько ролей, которым назначены права, и распределение пользователей по этим ролям (точнее какие пользователи с какими ролями могут заходить в базу). Логика работы такова, что 1 пользователь может заходить только с одной ролью. Понятное дело что в таком случае при логине в базу из приложения дополнительно указывать роль не имеет смысла, т.к. она однозначно определена - это с логической точки зрения. Но практически IB требует ее указания.
В этом собственно и вопрос: Как можно красиво решить эту проблему?
Т.е. чтобы при входе указывать только логин и пасс.
P.S. Конечно есть варианты ПРЯМОГО решения вопроса...
Например, создать табличку в базе в которой прописать эти соответствия и права на чтение этой таблички ВСЕМ пользователям.
Затем логиниться сначала без роли, читать из этой таблички информацию, а потом перелогиниваться уже с заданной ролью для работы. Можно наверное даже табличку не создавать - системная вроде есть какая-то...
Но не хочется так мудрить с логином... может специалисты порекомендуют что-то более правильное и логичное...
Заранее всех благодарю.
Автоподстановка роли при логине
-
- Сообщения: 3
- Зарегистрирован: 09 сен 2005, 15:17
элементарно. соответствие ролей пользователям хранится в rdb$user_privileges. Поэтому "дефолтную" роль можно сделать как 2 логина.
1.сначала обычный логин, без роли
2. чтение информации из rdb$user_privileges, то есть считывание роли пользователя
3. дисконнект
4. повторный "невидимый" коннект уже с заполненным параметром нужной роли.
1.сначала обычный логин, без роли
2. чтение информации из rdb$user_privileges, то есть считывание роли пользователя
3. дисконнект
4. повторный "невидимый" коннект уже с заполненным параметром нужной роли.
-
- Сообщения: 3
- Зарегистрирован: 09 сен 2005, 15:17
Возможный минус - если пользователю даны права на коннект с несколькими ролями - это работать не будет. Либо нужно дать ему возможность выбрать одну из разрешенных ему ролей.Олег Белов писал(а):kdv
Огромное спасибо.
Все работает.
SELECT RDB$Relation_Name FROM RDB$User_Privileges WHERE RDB$User = :UserName;
-
- Сообщения: 3
- Зарегистрирован: 09 сен 2005, 15:17