[Я решил опубликовать это как ответ, потому что он содержит примеры кода]
Вы можете создать компонент (или функцию) и использовать обратный вызов beforeFilter () в app_controller, таким образом выне нужно вручную добавлять функцию ко всем контроллерам.
Также вы можете использовать несколько префиксов для действий (см. Routing.prefixes
в ядре), это облегчит контроль доступа.Что-то вроде:
[app_controller.php]
function beforeFilter() {
if(isset($this->params['prefix']) && $this->params['prefix'] == 'admin'){
if(!isAdmin() || !isOwner())
$this->cakeError('error404');
}
}
[users_controller.php]
function admin_edit($id = null){
... // edit as usual
}
В стеке LAMP ваше узкое место обычно находится в базе данных
Моя проблема с тортом заключается в количестве запросов, которые он выполняет.Однажды я увидел, что моя «контактная» страница выполнила 21 запрос только для извлечения структуры данных и разрешений для этой общедоступной страницы.
Единственный способ оправдать использование ACL для доступа к данным - это когда разрешения являются динамическими, то есть " пользователь # 29 может редактировать пользователя # 12, потому что администратор решил это в бэк-офисе ",Но если у вас есть статические правила для доступа к данным (например, « пользователи могут редактировать только свою собственную информацию, а администраторы могут редактировать все »), это бесполезно для выполнения запросов, когда вы уже знаете ответы, потому что эти правила выигралине меняется во времени.
так что все зависит от вашего приложения. Наконец, еще одна мысль: если вы все еще планируете делать больше запросов = P, вы можете установить метод авторизации компонента Auth .Но использование компонента ACL для этого кажется мне плохой идеей
Cheers!