Вы правы, защита страницы и защита элементов разные.
По моему мнению и на практике, я думаю, что привязывание любого кода к роли или пользователю на самом деле является неправильным подходом. Вместо этого связывайте разрешения для элементов и страниц, а затем связывайте роли с этими разрешениями. И, конечно же, пользователям назначены роли.
Важно иметь все три:
- Пользователи
- Роли
- Разрешения <- это то, что вам не хватает </li>
Разрешения - это то, что защищает элементы и страницы, , а не роли или пользователи Ваш код не должен иметь никакого представления (потому что это не нужно), какие есть пользователи или роли - только имена разрешений.
Когда пользователь входит в систему, я беру его роль (и). Затем я беру все разрешения, которые назначены этим ролям (просто список строковых значений).
Например, на странице у меня может быть:
- Добавить товар
- Просмотр товара
- Удалить элемент
Когда я кодирую эту страницу, я на самом деле защищаю каждый из этих элементов с помощью строк разрешений, называемых схожими (addItem, viewItem, deleteItem).
<cfif listContainsNoCase( session.permissions, 'addItem' )>
<!--- code to add item --->
</cfif>
(Примечание. Я рекомендую использовать для этого пользовательский тег или функцию, но для примера вышеописанное работает нормально).
Если вы сделаете это таким образом, это обеспечит максимальную гибкость и абстракцию. Если вы защищаете элементы на основе ролей, вы ограничиваете себя:
- Добавление новых ролей потребует большого количества изменений кода!
- Изменение разрешений между ролями требует большого количества изменений кода!
Если вы сделаете это, как упомянуто выше, вам никогда не потребуется изменять код безопасности в базе кода, потому что разрешение «addItem» всегда должно быть в логике «добавления элемента», верно? :)
Теперь, если вам нужно создать роль типа «менеджер», которая имеет все роли пользователя и несколько прав администратора, вы просто создаете эту роль и назначаете ей правильные разрешения (возможно, addItem и editItem, но не deleteItem). Бам! Теперь у меня есть роль менеджера, которую можно назначать пользователям с без изменений кода !
Если бы я посыпал свой код типом "является пользователем эта роль" - мне пришлось бы везде редактировать свой код, чтобы разрешить мою новую роль "менеджер" - черт!
Имеет смысл?
=) * 1 054 *