раздача прав на формы

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: раздача прав на формы

Сообщение Attid » 02.09.2008 12:01:29

v-t-l писал(а):нужно определить, что за контрол находится под мышью и показать окошко для настройки ACL.

70 форм, сколько контролов даже боюсь считать =) муторно это . . . .




еще можно соединить права на права в БД, типа перед показом формы проверять есть ли в БД права на таблицу которая будет показываться , вот только с менюшками в главном модуле сложнее в данном случае.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: раздача прав на формы

Сообщение v-t-l » 02.09.2008 14:12:40

Attid писал(а):70 форм, сколько контролов даже боюсь считать =) муторно это . . . .

Ну у меня форма одна - заказчик хочет все в одном окне со вкладками, и доступ к каждому контролу или группе контролов (GroupBox, Panel, TabSheet) заказчик хочет раздавать сам (Visible, ReadOnly, Enabled).
v-t-l писал(а):При нажатии комбинации клавиш как правильно получить локальные (относительно формы) координаты мыши.

Никто не подскажет?
v-t-l
энтузиаст
 
Сообщения: 734
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: раздача прав на формы

Сообщение Alexx2000 » 02.09.2008 14:19:31

v-t-l писал(а):При нажатии комбинации клавиш как правильно получить локальные (относительно формы) координаты мыши.

А в чем проблема Mouse.CursorPos и функция ScreenToClient (кажется так)
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 488
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

Re: раздача прав на формы

Сообщение shade » 02.09.2008 14:21:54

v-t-l писал(а):как правильно получить локальные (относительно формы) координаты мыши.

ClientToParent, ParentToClient, ClientToScreen, ScreenToClient...
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Re: раздача прав на формы

Сообщение Brainenjii » 02.09.2008 14:24:34

Кстати, по поводу... Как с TNoteBook'ом запретить вход на некоторые вкладки? Сейчас я это делаю через Notebook1PageChanged, но вроде как не совсем Ъ это дело ^_^
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: раздача прав на формы

Сообщение v-t-l » 02.09.2008 15:14:30

ClientToScreen - спасибо, что напомнили.
v-t-l
энтузиаст
 
Сообщения: 734
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: раздача прав на формы

Сообщение Attid » 11.01.2009 19:14:47

UP =)

лениво новую тему заводить. так тогда ничего не реальзовал, нашлись более важные дела.

сейчас перечитал все и решил оставить велосипедик с точками.

осталось эти точки хранить обычно это делается в БД в виде таблички
Код: Выделить всё
ID | ShortName | Comment
1  |  main |  доступ к главной форме
2  | right |  доступ к правам
3  | game |  доступ к играм


после чего можно как алекс обращаться к ним по ИД или по короткому имени
а в БД хранить связь между пользователем точкой и типом доступа (чтение\запись)

но в мне растпростронять точки в БД не удобно. хочу их держать в ПО с описанием и возможно автоподстановкой имени.

вопрос как это реальзовать ?

решение в лоб создаем 2 массива
Код: Выделить всё
const
caGrants = ['main','right','game'];
caGrantsComment = ['доступ к главной форме','достпук к правам','доступ к играм'];


но тут никакого автоподстановки не будет и надо будет помнить по номерам.
можно что-то вроде типа + массив

Код: Выделить всё
type  TcaGrants = (caMain, caRight, caGame)
caGrantsComment = ['доступ к главной форме','достпук к правам','доступ к играм'];


и будет работать подсказка, но не знаю можно ли в коде получить "caGame" (текстом для показа пользователю) и его номер в типе.


может есть еще какие варианты ?
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: раздача прав на формы

Сообщение Mr.Smart » 12.01.2009 01:27:08

Имена констант перечисления можно получить через RTTI
а не проще будет завести доп. массив констант с короткими названиями?
Код: Выделить всё
...
type
  TcaGrants = (caMain, caRight, caGame);
const
  caGrants: array [TcaGrants] of String = ('main','right','game');
  caGrantsComment: array[TcaGrants] of String = ('доступ к главной форме','достпук к правам','доступ к играм');
...
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: раздача прав на формы

Сообщение shade » 17.01.2009 19:22:55

Я тоже только начал реализовывать свои идеи, наверное уже в несколько изменённом виде.

Права раздаются не на формы (мне это не подходит), а на объекты - получается ACL - хотя никто не запрещает форму считать объектом :D

Соовественно делаю функции
procedure Grant(privilege: Tstring; object_id: Tinteger; user_id: Tinteger); - дать право
procedure Revoke(privilege: Tstring; object_id: Tinteger; user_id: Tinteger); - отнять право
function CheckGrant(privilege: Tstring; object_id: Tinteger; user_id: Tinteger): Tboolean; - проверить обладет ли пользователь правом
function GetGrantsOn(object_class: Tstring; object_id: Tinteger; user_id: Tinteger): TGrantsList; - получить список прав которыми обладает пользователь на объекте

Константы я не прописываю, все привелегии храняться в БД:
Код: Выделить всё
CREATE TABLE privileges
(
   -- ID привилегии
   privilege_id INT PRIMARY KEY auto_increment,
   -- уникальный строковый идентификатор привилегии
   privilege_name VARCHAR(80) UNIQUE NOT NULL
);


Например, есть объект класса "project" с ID=1234 и нужно настроить права пользователя с ID=5678
1. нам нужно получить список привелегий для класса "project"
SELECT * FROM privileges WHERE privilege_name LIKE "project:%" (естественно для это будет специальная функция, чтобы каждый раз не писать запрос), получим список прав (или ролей), например,
post_news - разрешение добавлять новости
edit_news - разрешение удалять/редатировать новости проекта.
edit_articles - разрешение добавлять/редатировать статьи.
svn_commit - разрешение на коммит в svn
и т.п.
2. Сформировать табличку в каждой строке чекбокс + название привелегии
3. Админ отмечает глочками нужные привелегии нажимет сохранить
4. В цикле обходим по всем строкам, если галочка отмечена, то вызываем Grant(priv_name, obj_id, user_id), если не отмечена, то вызываем Revoke(priv_name, obj_id, user_id)

Соответственно получается что форма настройки прав будет герироваться автоматически исходя из информации в БД.
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Пред.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14

Рейтинг@Mail.ru