Re: Разграничить права доступа пользователей
От: alexandrov_alex США  
Дата: 18.08.03 14:07
Оценка: 4 (2) +1
Здравствуйте, Cokkab, Вы писали:

C> Планируется, что будут существовать разные группы пользователей.

C> Некоторым группам будут доступны одни элементы, другим другие, третьим
C> часть одних и чать других. (Где-то кнопка от других скрыта, где-то меню
C> недоступно).
C>
C> Как это правильнее сделать? Как это вообще делают?

В одном из своих проектов мы делали следующим образом:

Права разграничиваются по следующим элементам интерфейса: пункты меню, элементы управления. С каждым элементом интерфейса связывается строка вида "<acl=128>", которая обозначает битовую маску, необходимую для доступности этого элемента управления пользователю. У текущего пользователя есть "эффективный" acl, который обозначает его текущие права. С элементами интерфейса строку можно связать либо через поле Tag (есть практически во всех RAD), либо через SetProp/GetProp для окошек и контролов. Для меню — в структурах MENUINFO и MENUITEMINFO есть пользовательские поля, можно там хранить.
Еще есть объект-синглетон и у него, в частности, две функции. Одна, условно говоря, принимает HWND, другая HMENU. Функция пробегает рекурсивно по всем дочерним узлам (подменю или подокнам) и для всех элементов достает строку вида <acl=128>, делает and с текущими правами пользователя, сравнивает с acl. Соответственно делает enabled/disabled. В общем, стандартный активатор. Принцип, думаю, понятен? Детали не разжевываю.

Для нас работает, YMMV.

-- Всего хорошего!
-- Alex Alexandrov, e-mail: alexandrov_alex@fromru.com
Posted via RSDN NNTP Server 1.7 beta
It's kind of fun to do the impossible (Walt Disney)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.