Поделюсь прямо готовым примером
1) Надо как то хранить в БД права пользователя
Вводим понятие "роль" - это некое тривиальное право доступа к конкретному разделу (например user_view, user_edit, user_delete).
CREATE TABLE `role` (
`role_title` varchar(255) NOT NULL COMMENT 'Роль',
`role_title_description` text NOT NULL COMMENT 'Описание роли',
PRIMARY KEY (`role_title`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Роли пользователей';
Роли объединяются в группы (администраторы, модераторы, итд)
CREATE TABLE `group` (
`group_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID группы',
`name` text NOT NULL COMMENT 'Имя группы',
PRIMARY KEY (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Группы пользователей';
CREATE TABLE `xref_group_role` (
`group_id` int(11) NOT NULL,
`role_title` varchar(255) NOT NULL,
PRIMARY KEY (`group_id`,`role_title`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Связь групп и ролей';
Ну и пользователи привязаны к группам
CREATE TABLE `xref_user_group` (
`user_id` int(11) NOT NULL,
`group_id` int(11) NOT NULL,
PRIMARY KEY (`group_id`,`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Связь пользователей и групп'
2) Когда пользователь авторизуется - получаем список его ролей
SELECT
distinct `role`.`role_title`
FROM
`xref_user_group`
JOIN `xref_group_role`
ON `xref_user_group`.`group_id` = `xref_group_role`.`group_id`
JOIN `role`
ON `xref_group_role`.`role_title` = `role`.`role_title`
WHERE
`xref_user_group`.`user_id` = 123
3) В рамках данного примера подразумевается что все роли исключительно "разрешительные". Если у пользователя есть роль - он может совершать соответствующее действие. Нет - не может.
Соответственно в логике приложения, когда пользователь пытается совершить какое то действие - просто проверяем наличие у него роли.
Фуф)
UPDСпасибо, большое!
Только не совсем понятно как это должно взаимодействовать например с меню. Например есть меню Правка -> Добавить, Изменить, Удалить. Если у пользователя есть права на добавление и изменение но нет на удаление, как сделать что бы пункт меню "Удалить" был не активен?
Я под десктоп последний раз кодил лет 12 назад на Visual Basic (еще не .net) , но тем не менее:
У вас должен быть код который создает это меню. В этот код вставляем все проверки ролей.
Если кода меню нет (вы собрали меню через конструктор), то нужно написать код который выполняется скажем при загрузке формы, смотрит на роли текущего пользователя и соответственно включает/выключает пункты меню.