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

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

Киньте мне пожалуйста.
...
Рейтинг: 0 / 0
вопрос общего характер
    #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
вопрос общего характер
    #32248785
Igor Elyas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть такой подход : не давать пользователю напрямую работать с таблицами - все посредством встроенных процедур которые и контролируют действия и права пользователей. Иногда помогает когда подход со стандартными правами и ролями не подходит... такое иногда случается.

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

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


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