CakePhp ACL 权限

Posted

技术标签:

【中文标题】CakePhp ACL 权限【英文标题】:CakePhp ACL permissions 【发布时间】:2010-07-26 18:01:41 【问题描述】:

检查我的应用程序,我发现每个用户都可以访问其中的所有操作。 我正在使用 cakephp 内置 ACL 组件... 通过终端显示正确检查权限是允许或不允许用户调用某个操作。但是一旦我在浏览器上检查应用程序,所有用户都可以访问每个操作。有什么线索可以这样做吗?

【问题讨论】:

请提供您在应用程序中检查权限的部分代码。 【参考方案1】:

如果您使用内置的 Auth 和 ACL 组件,您可以让 CakePHP 自动为您处理事情。首先,您可以确保在 App 文件夹中有一个 app_controller.php 文件。我的看起来像这样:

<?php

class AppController extends Controller 

    var $helpers = array('Form', 'html', 'javascript', 'Time');
    var $components = array( 'Acl', 'Auth', 'Session', 'Cookie');    

    function beforeFilter()   
        $this->Auth->authorize = 'actions';
        $this->Auth->actionPath = 'controllers/';
        $this->Auth->authError = ' Access Denied!';

        $this->Auth->loginRedirect = '/registrations';
        $this->__checkAuth();
    

    private function __checkAuth() 
        $currentUser = $this->Auth->user();
        $currentUser = $currentUser['User'];
        $this->set(compact('currentUser'));
    


?>

如果您正在授权“操作”,请尝试将该代码包含在您的 app_controller.php 文件中,或者如果您还没有,请创建一个。然后开始浏览,看看是否有任何更改。

如果您在每个控制器的 beforeFilter 中有自定义代码,您还需要向每个控制器添加一行代码。

function beforeFilter()
    parent::beforeFilter(); 

任何放在控制器中的 beforeFilter(甚至是空白的)都会覆盖 AppController 的 beforeFilter,除非您使用上面的代码专门调用 AppController 的 beforeFilter。

您还可以在此处找到有关使用 CakePHP 的 ACL 的一些最佳教程:http://aranworld.com/article/161/cakephp-acl-tutorial-what-is-it

【讨论】:

以上是关于CakePhp ACL 权限的主要内容,如果未能解决你的问题,请参考以下文章

cakePHP 权限使用 ACL 并检查模型上的 user_id

对 CakePHP 应用程序使用 ACL 或简单权限

CakePHP 通过组名而不是 ID 检查权限

Cakephp auth 和 acl 未登录用户组

使用 CakePHP 'Acl' 组件

如何绕过 CakePHP 中 requestAction 的 ACL 查询?