Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / вопрос общего характер / 10 сообщений из 10, страница 1 из 1
25.08.2003, 13:53
    #32246195
relax
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос общего характер
кто нибудь может посоветовать, может у кого нить есть наработки, поделитесь если не жалко. мне нужно синхронизировать разграничение прав на сервере (interbase) и на клиенте. можно ли сделать так, чтоб было более менее универсально, ато у меня получается что при загрузке приложения-клиента мне приходится делать очень много проверок, врезультате некоторые кнопки бокируются, некоторые становятся невидимые, etc.
но при добавлении новой функции в приложение клиент, или при создании новой таблицы в базе, надо будет все заново прописывать...

можно ли как то этот процесс оптимизировать?
...
Рейтинг: 0 / 0
25.08.2003, 14:56
    #32246354
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос общего характер
Я когда-то делал так:
Подключение к БД выполняется в 2 этапа. Сначала выбирается пользователь БД, а потом оператор. Собственно права операторов могут храниться в отдельной таблице в самой БД в виде битовых масок, к примеру (или строк).
Оператор программы подключается под пользователем БД, которому можно только читать список операторов и их права, после чего выбирает себя из списка операторов и переподключается с тем же пользователем БД, что и первый раз, и ролью, которая прописана ему в таблице операторов.
Все формы клиентского приложения удобно наследовать от одной базовой, где и делать проверку прав и, в зависимости от этого, блокировать или раблокировать кнопки ...
...
Рейтинг: 0 / 0
26.08.2003, 03:08
    #32246909
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос общего характер
Я делал маленько иначе
По все логике вещей база данных сама должна контролировать доступ и не в коем случае не клиент. Отсюда простой вывод. пусть клиент делает что хочет, в случае ошибки ему можно сгенерировать исключение, где и сообщить ему что он не прав. В этом нет ничего страшного.
Кстате, могу кинуть исходник коротенькой процы, которая генерирует произвольное текстовое сообщение в качестве исключения. Например можно написать: 'Это тестовое сообщение №'||35 и в результате клиенту прилетит: "Это тестовое сообщение №35"
...
Рейтинг: 0 / 0
26.08.2003, 06:52
    #32246937
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос общего характер
единственное что мне приходит в голову, это изменение эескепшена на лету в системной таблице. так?
...
Рейтинг: 0 / 0
26.08.2003, 08:06
    #32246963
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос общего характер
alex_k
именно так. И после генерируется тот самый exception. Т.к. после исключения применить транзакцию нельзя, то не применяется и изменение в системной таблице. Так что никто не замечает подмены, а кленту летит то что нужно
...
Рейтинг: 0 / 0
26.08.2003, 10:15
    #32247081
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос общего характер
вообще, хотелось бы иметь генерируемое исключение, а то мало-ли, к тому же пользователю, вызывающему ХП надо ведь дать доступ на изменение системной таблицы...
может во второй версии сделают....
...
Рейтинг: 0 / 0
26.08.2003, 14:40
    #32247631
KiLLun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос общего характер
to StarWind
Кстате, могу кинуть исходник коротенькой процы, которая генерирует произвольное текстовое сообщение в качестве исключения.

Киньте мне пожалуйста.
...
Рейтинг: 0 / 0
27.08.2003, 03:46
    #32248305
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос общего характер
значит текст
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE EXCEPTION AnyException 'Неопределенное исключение';

set term ^ ;

CREATE PROCEDURE EXCEPTPROC(EXCEPTTEXT VARCHAR( 80 ))
AS
begin
  update RDB$Exceptions set RDB$Message = :ExceptText where RDB$EXCEPTION_NAME = 'ANYEXCEPTION';
  Exception AnyException;
  suspend;
end^

set term ; ^

Grant execute on procedure ExceptProc to Public;


а по поводу безопасности... достаточно дать разрешение проце на изменение таблицы , а клиенту на исполнение процы и все будет нормалек. Клиент не будет править системную таблицу напрямую, зато сможет юзать процу
...
Рейтинг: 0 / 0
27.08.2003, 12:46
    #32248785
Igor Elyas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос общего характер
есть такой подход : не давать пользователю напрямую работать с таблицами - все посредством встроенных процедур которые и контролируют действия и права пользователей. Иногда помогает когда подход со стандартными правами и ролями не подходит... такое иногда случается.

У процедуры параметр - юзер и пароль а дальше проца решает можно юзеру делать то что он хочет или нет.

Немного сложно и с элементами изврата но кому щас легко )
...
Рейтинг: 0 / 0
27.08.2003, 14:34
    #32248952
KiLLun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос общего характер
to StarWind
Круто :). Большое спасибо, буду должен.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / вопрос общего характер / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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