Права доступа и роли пользователей
От: _me_  
Дата: 23.03.08 12:14
Оценка:
Посоветуйте, какая должна быть архитектура ПО. Т.е. есть таблица пользователей, есть роли, роли выполняют определенные функции. Как делать проверку на роли и т.п. при выполнении функций...

приложение будет написано на J2EE, сервер Tomcat, технология XSLT + сервлеты.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Права доступа и роли пользователей
От: adontz Грузия http://adontz.wordpress.com/
Дата: 23.03.08 12:32
Оценка:
Здравствуйте, _me_, Вы писали:

Я в своё время сделал так
Элементарные права (чтение или запись конкретного свойства конкретного типа объектов) объединял в роли.
Пользователей объединял в группы. Группы могли в себя включать другие группы, но без циклических зависимостей.
Роли назначал группам.

В целом весьма гибко, но если изначально не создать вменяемые роли установка прав доступа превратится в кошмар.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[2]: Права доступа и роли пользователей
От: _me_  
Дата: 23.03.08 12:48
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, _me_, Вы писали:


A>Я в своё время сделал так

A>Элементарные права (чтение или запись конкретного свойства конкретного типа объектов) объединял в роли.
A>Пользователей объединял в группы. Группы могли в себя включать другие группы, но без циклических зависимостей.
A>Роли назначал группам.

A>В целом весьма гибко, но если изначально не создать вменяемые роли установка прав доступа превратится в кошмар.


А как делать проверку на роль при выполнении каких либо операций? где это делать? в контроллере если у меня шаблон MVC.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Права доступа и роли пользователей
От: adontz Грузия http://adontz.wordpress.com/
Дата: 23.03.08 13:24
Оценка:
Здравствуйте, _me_, Вы писали:

__>А как делать проверку на роль при выполнении каких либо операций?


При попытке выполнения какого-либо действия проверяется, разрешает ли это действие какая-либо из ролей, назначенных группам в которые входит пользователь. В целях оптимизации после логина запоминается список всех групп в которых состоит пользователь.

__>где это делать? в контроллере если у меня шаблон MVC.


Я счёл разумным предположить, что в многопользовательской системе модель сама по себе не бывает, а бывает только в контексте какого-либо пользователя. Это достаточно очевидно, если вспомнить, что разные пользователи могут иметь разный доступ даже на чтение и каким-то конкретным пользователям какие-то конкретные данные могут быть "не видны". Таким образом проверка прав доступа и соответствующая фильтрация данных производится в модели. Модель при этом удобно разбить на слой непосредственно доступа к данным и слой безопасности, потенциально отклоняющий и модифицирующий запросы. Производить проверку в контролёре я считаю неразумным, так как контролёров для одной и той же может быть много. Кроме того, проверка в модели оптимальнее, так как у базового хранилища запрашиваются уже отфильтрованные данные.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[4]: Права доступа и роли пользователей
От: stump http://stump-workshop.blogspot.com/
Дата: 23.03.08 19:26
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, _me_, Вы писали:


__>>А как делать проверку на роль при выполнении каких либо операций?


A>При попытке выполнения какого-либо действия проверяется, разрешает ли это действие какая-либо из ролей, назначенных группам в которые входит пользователь. В целях оптимизации после логина запоминается список всех групп в которых состоит пользователь.


__>>где это делать? в контроллере если у меня шаблон MVC.


A>Я счёл разумным предположить, что в многопользовательской системе модель сама по себе не бывает, а бывает только в контексте какого-либо пользователя. Это достаточно очевидно, если вспомнить, что разные пользователи могут иметь разный доступ даже на чтение и каким-то конкретным пользователям какие-то конкретные данные могут быть "не видны". Таким образом проверка прав доступа и соответствующая фильтрация данных производится в модели. Модель при этом удобно разбить на слой непосредственно доступа к данным и слой безопасности, потенциально отклоняющий и модифицирующий запросы. Производить проверку в контролёре я считаю неразумным, так как контролёров для одной и той же может быть много. Кроме того, проверка в модели оптимальнее, так как у базового хранилища запрашиваются уже отфильтрованные данные.


Не надо забывать, что помимо разграничения доступа к данным, есть и разграничение доступа к операциям или функциональным возможностям. Такие проверки разумно выполнять именно в контроллере.
Обычно подсистема авторизации выделяется в отдельный модуль. Желательно чтобы она была жестко инкапсулирована и не оставляла никаких возможностей проверки прав доступа минуя свой public интерфейс.
Понедельник начинается в субботу
Re[5]: Права доступа и роли пользователей
От: adontz Грузия http://adontz.wordpress.com/
Дата: 23.03.08 20:31
Оценка:
Здравствуйте, stump, Вы писали:

S>Не надо забывать, что помимо разграничения доступа к данным, есть и разграничение доступа к операциям или функциональным возможностям. Такие проверки разумно выполнять именно в контроллере.

S>Обычно подсистема авторизации выделяется в отдельный модуль. Желательно чтобы она была жестко инкапсулирована и не оставляла никаких возможностей проверки прав доступа минуя свой public интерфейс.

Stateless функциональные возможности большая редкость. Обычно всё так или иначе сводится к возможности писать или читать те или иные данные. Что касается системы авторизации, то да, она должна быть не только жёстко инкапсулирована, но и защищена. Скажем в клиент-серверной системе она должна обязательно в полном объёме присутствовать и на сервере.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re: Права доступа и роли пользователей
От: nvoynov Украина http://nvoynov.blogspot.com
Дата: 23.03.08 20:41
Оценка:
Здравствуйте, _me_, Вы писали:

__>Посоветуйте, какая должна быть архитектура ПО. Т.е. есть таблица пользователей, есть роли, роли выполняют определенные функции. Как делать проверку на роли и т.п. при выполнении функций...


__>приложение будет написано на J2EE, сервер Tomcat, технология XSLT + сервлеты.


Как раз место для аспектов — советую посмотреть перед реализацией на AspectJ / Spring AOP и книжки типа AOP in Action (есть пример, ну и в сети что-то было — поищите). Смысл примерно такой — вы просто пишете код без проверки всяких там прав. Затем пишете код проверки прав доступа, определяете точки расширения и подключаете аспект.

вот была какая-то старая статья, думаю что сейчас будет еще проще
http://citforum.univ.kiev.ua/internet/javascript/aop/

сам сейчас не программирую, но АОП заинтересовал и немного баловался — работает сц%..
С уважением, Николай
Re: Права доступа и роли пользователей
От: Stormblast http://www.myspace.com/stormblastblack
Дата: 24.03.08 08:27
Оценка:
Здравствуйте, _me_, Вы писали:

__>Посоветуйте, какая должна быть архитектура ПО. Т.е. есть таблица пользователей, есть роли, роли выполняют определенные функции. Как делать проверку на роли и т.п. при выполнении функций...


__>приложение будет написано на J2EE, сервер Tomcat, технология XSLT + сервлеты.


Права объединены в роли, которые назначаются пользователям, где каждому пользователю можно дополнительно добавить или убрать право из его списка прав(List rights = User.getRights()) ...
Все права в идеале должны проверяться на сервере, по возможности и на клиенте что бы не допускать лишних запросов и действий, но возможны и какие то другие частные варианты ...
Re: Права доступа и роли пользователей
От: Sinclair Россия https://github.com/evilguest/
Дата: 24.03.08 09:42
Оценка: 1 (1)
Здравствуйте, _me_, Вы писали:

Есть две основных схемы — DACL и hardcoded ACL.

В первом случае с каждым объектом модели ассоциируется т.н. Discretionary Access Control List — cписок разрешений. Каждое разрешение, ACE (Access Control Entry) либо разрешает, либо запрещает некоему субъекту определенное действие. Субъектом обычно выступает пользователь, группа, либо специальный субъект типа CREATOR_OWNER.
Такая схема позволяет очень гибко настраивать правила доступа, но требует значительных приседаний, чтобы настройки по умолчанию более-менее соответствовали ожиданиям, и администратору не приходилось вручную настраивать списки для каждого объекта.

Во втором случае обычно поступают так: готовится фиксированный список ролей; привилегированные действия требуют наличия некоторой (как правило, одной) роли.

Управление безопасностью сводится к назначению этих фиксированных ролей пользователям.

Эта значительно менее гибкая схема тем не менее позволяет добиться, во-первых, высокой эффективности операций (проверка IsUserInRole обычно дешевле, чем сканирование DACL с учетом наследования и прочих особенностей), а во-вторых — понятности для человека. Не нужно вычислять effective permissions для подозрительной пары объект/субъект, достаточно посмотреть в список ролей пользователя.

Теперь о реализации. Проверка прав доступа обычно делается в "пограничном слое".Желательно разделить все функции на "внутренние", в которых никаких проверок не осуществляется, и "внешние". Внутренние функции не должны быть видны из внешнего кода; внешние функции должны выполнить авторизацию и вызвать нужные внутренние.
Такое устройство позволяет избежать избыточных проверок. Это улучшает производительность, и позволяет обойти острые углы: к примеру, если у пользователя нет права на изменение объекта, но есть право на действие, которое внутри изменяет состояние объекта.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Права доступа и роли пользователей
От: MozgC США http://nightcoder.livejournal.com
Дата: 05.05.08 20:19
Оценка:
Здравствуйте, _me_, Вы писали:

__>Посоветуйте, какая должна быть архитектура ПО. Т.е. есть таблица пользователей, есть роли, роли выполняют определенные функции. Как делать проверку на роли и т.п. при выполнении функций...

__>приложение будет написано на J2EE, сервер Tomcat, технология XSLT + сервлеты.

Возможно вам будет интересно поглядеть книгу
Rockford Lhotka — Expert C# 2005 Business Objects — книга о построении целого Framework'а для использования при разработки бизнес-приложений. С примерами.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.