Здравствуйте, 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