Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011
Помог: 3 раз(а)
Здравствуйте!Столкнулся с проблемой.Есть пользователи.У них есть привилегии.Я так понимаю нужно создать таблицу users_privileges.Далее у некоторых привилегий есть исключения.Опишу детальнее.Например Есть привилегия просматривать фид событий на сайте.Если эта опция == 0, то фид не выводится.Если == 1, выводится.Фид выводится примерно в таком формате:
Пользователь Сергей добавил фото к объекту Новостройка на Мосфильмовской.
Пользователь Игорь прокомментировал объект Воркаут площадка
Нужно например реализовать так, что фид пользователя 'Игорь' защищен от просмотра.
Это еще не все.Также нужно сделать что бы и фид объектов был защищен от просмотра.
И таких вариантов может быть очень много.Например есть привилегия назначать пользователей на должности, но некоторые должности или пользователи защищены от этой привилегии.Как можно организовать структуру таблиц в этом случае?
Думал сделать так:
Сделать таблицу users_privileges и в ней поле aditional_data сериализованный массив, куда записывается дополнительные условия
Но как понимаю это плохая практика.
У кого какие мысли на этот счет?Спасибо!
----- $i = 0;
$i = $i++ + ++$i; ?
EuGen
Отправлено: 11 Июня, 2013 - 19:35:22
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Мысли стандартные. Есть несколько разных вариантов реализации ACL. Списки доступа, роли и т.п. В Zend ACL реализованы списки доступа к ресурсам.
На примере ролей: есть сущность "действие", есть сущность "роль", есть сущность "пользователь". Пользователи обладают набором ролей, каждая из ролей имеет набор действий (то есть тех действий, которые разрешаются данной ролью). Пользователь может выполнять действие тогда и только тогда, когда оно присутствует в списке действий хотя бы одной из назначенной ему ролей.
С точки зрения БД получается 5 таблиц: permissions (действия), roles (роли), users (пользователи), roles_permissions (список действий для ролей, таблица-связка), users_roles (список ролей для пользователей, таблица-связка).
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
jonston
Отправлено: 11 Июня, 2013 - 19:43:24
Посетитель
Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011
Помог: 3 раз(а)
EuGen пишет:
Мысли стандартные. Есть несколько разных вариантов реализации ACL. Списки доступа, роли и т.п. В <a href='http://framework[dot]zend[dot]com/manual[dot][dot][dot]ml'>Zend ACL</a> реализованы списки доступа к ресурсам.
На примере ролей: есть сущность "действие", есть сущность "роль", есть сущность "пользователь". Пользователи обладают набором ролей, каждая из ролей имеет набор действий (то есть тех действий, которые разрешаются данной ролью). Пользователь может выполнять действие тогда и только тогда, когда оно присутствует в списке действий хотя бы одной из назначенной ему ролей.
С точки зрения БД получается 5 таблиц: permissions (действия), roles (роли), users (пользователи), roles_permissions (список действий для ролей, таблица-связка), users_roles (список ролей для пользователей, таблица-связка).
Спасибо!Сейчас посмотрю инфу по этой теме. (Добавление)
EuGen пишет:
С точки зрения БД получается 5 таблиц: permissions (действия), roles (роли), users (пользователи), roles_permissions (список действий для ролей, таблица-связка), users_roles (список ролей для пользователей, таблица-связка).
Например есть роль manager и роль director у manager есть привилегия редактирования аккаунта.Как ограничить director от редактирования его аккаунта?
----- $i = 0;
$i = $i++ + ++$i; ?
EuGen
Отправлено: 11 Июня, 2013 - 19:59:16
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
jonston пишет:
Например есть роль manager и роль director у manager есть привилегия редактирования аккаунта.Как ограничить director от редактирования его аккаунта?
Ввести разные действия (привилегии). Первое - редактирование своей учётной записи, второе - редактирование всех учётных записей, кроме своей. И соответственно проверять в приложении.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
jonston
Отправлено: 11 Июня, 2013 - 20:06:56
Посетитель
Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011
Помог: 3 раз(а)
EuGen пишет:
jonston пишет:
Например есть роль manager и роль director у manager есть привилегия редактирования аккаунта.Как ограничить director от редактирования его аккаунта?
Ввести разные действия (привилегии). Первое - редактирование своей учётной записи, второе - редактирование всех учётных записей, кроме своей. И соответственно проверять в приложении.
А если приложение требует очень глубокой кастомизации.Например старший менеджер назначает менеджеру привилегию редактировать аккаунты, но при этом как дополнительно есть список должностей (ролей) которые может отметить старший менеджер закрывая таким образом доступ к аккаунтам выбранным в списке.Получается на каждую роль нужно создавать привилегию?
----- $i = 0;
$i = $i++ + ++$i; ?
EuGen
Отправлено: 11 Июня, 2013 - 20:11:53
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Нет, зачем же так. Ввести роль "защищённый пользователь". И не давать редактировать профили пользователей, которые обладают этой ролью - никому, кроме тех, кто добавлял пользователя или администратора (это я вариант привожу, как у Вас по бизнес логике - сами решите).
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
caballero
Отправлено: 11 Июня, 2013 - 20:16:42
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
такие хитромудрые policy не только сложно реализуемы но и бесполезны. Мало к то из юзеров будет со всем этим возится.
яркий пример права доступа в виндовс - доступ к объектам с иерархией наследованием, правами на различные действия и т.д. Я уже не говорю про доменную организацию.
и кто это использует? максимум какой то админ закроет какую то папку или поставит только чтение.
Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011
Помог: 3 раз(а)
caballero пишет:
такие хитромудрые policy не только сложно реализуемы но и бесполезны. Мало к то из юзеров будет со всем этим возится.
яркий пример права доступа в виндовс - доступ к объектам с иерархией наследованием, правами на различные действия и т.д. Я уже не говорю про доменную организацию.
и кто это использует? максимум какой то админ закроет какую то папку или поставит только чтение.
Например - это приложение подразумевающее управление персоналом.
А если в ТЗ будет описан такой функционал, что мне говорить заказчику?Что в виндовсе правами никто не пользуется и нам не стоит?
Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011
Помог: 3 раз(а)
EuGen пишет:
Нет, зачем же так. Ввести роль "защищённый пользователь". И не давать редактировать профили пользователей, которые обладают этой ролью - никому, кроме тех, кто добавлял пользователя или администратора (это я вариант привожу, как у Вас по бизнес логике - сами решите).
А как быть например с защитой некоторых объектов от редактирования, защитой просмотров фида пользователей, защитой редактирования некоторых должностей?Здесь уже не создашь сущность действие.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.