【问题标题】:CakePHP ACL without prefixed methods没有前缀方法的 CakePHP ACL
【发布时间】:2011-12-13 08:54:19
【问题描述】:

在使用 CakePHP 开发应用程序时,我得出的结论是,在使用 admin、moderator 等前缀时存在大量冗余数据。

google了一下,发现zuha-3回复了http://cakephp.1045679.n5.nabble.com/Going-back-to-school-ACL-td4941972.html#a4949876

在我们的应用程序中,我们保留了前缀路由,但去掉了方法路由。 所以我们仍然得到$this->params->params['prefix'] 但是路由用户 到index() 方法而不是admin_index() 方法。然后我们 完全由 ACL 决定您的角色是否有权访问 到索引函数。这可以让我们摆脱 50% 的视图 文件和 50% 的控制器方法。

在我们分配的不同用户角色中,我们可以有不同的视图 查看用户角色的前缀。所以我们可以有一个管理视图,所有 管理员用户角色的用户会看到 /Posts/View/Posts/admin/index.ctp 而不是 /Posts/View/Posts/index.ctp 当且仅当管理视图存在时。我们 可以为经理、用户等做同样的事情,并留给 每个应用程序来决定管理员是否会看到管理员视图或 经理视图或客人视图。

所以这会去掉很多多余的方法。

是否有人在这方面有某种关注操作帖子或有关如何执行此操作的有用信息。

【问题讨论】:

    标签: php methods routes acl cakephp-2.0


    【解决方案1】:

    你应该可以像这样创建路由:

    Router::connect('/admin/users/index', array('admin' => false, 'controller' => 'users', 'action' => 'index'));
    

    然后你需要一个 index.ctp 视图,而不是一个 admin_index.ctp 视图。但我不太确定为什么这会给您的应用程序添加任何内容。管理员视图通常有自己的特定功能(例如,一旦用户的权限得到验证,就授予添加/删除用户的访问权限),因此应该与“常规”视图分开。 (否则你会得到带有管理员验证逻辑的非常混乱的视图,这并不是一个真正的 MVC 应用程序,这些东西属于控制器。)

    编辑:根据您在下面的评论,我只会从您的 mod 方法渲染管理视图并设置一些标志来确定他们可以做什么/不能做什么/看到什么。例如:

    function mod_index() {
        $this->set('can_edit_users', 1);
        $this->set('can_delete_users', 0);
    
        // User admin_index view, rather then looking for mod_index view
        $this->render('admin_index');
    }
    

    然后在您的视图中添加简单的检查以确定他们可以看到和看不到哪些链接/信息。

    【讨论】:

    • 例如我有管理员和版主,他们的权限几乎是彼此相似的,但是与其创建两个具有完全相同逻辑的方法是多余的。如果您需要提交更改,它也会变得最糟糕。观点可以完全不同。我想我只想两全其美......
    • 根据您的评论编辑答案。
    • 是的,我可以看到索引页是如何工作的。即使确定要显示或不显示哪些链接也是一个好主意。但是你仍然有同样的问题,在你的控制器中有两个(或更多)方法做同样的事情。但是通过一遍又一遍地重新思考,这些变化需要更多的核心工作......我认为这个想法是这样的:example.com/prefix/controller/action > 将映射到 controller::prefix_action,视图为 prefix_action.ctp。但是,如果可以检查该方法是否存在而不是去默认映射,否则采取另一个,全是自主的?
    • 如果是您担心的方法,您仍然可以使用路由将 /mod/action 路由到 /admin/action,然后使用类似 $this->params->url 来确定是否/admin 或 /mod 用于获取您的方法。
    • 是的,这也是可能的,我会试一试!感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 2011-06-09
    • 2013-10-09
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多