CakePHP ACL没有前缀方法

时间:2011-12-13 08:54:20

标签: php methods routes acl cakephp-2.0

在CakePHP中开发应用程序时,我发现在使用admin,moderator等前缀时会有很多冗余数据。

当谷歌搜索一下时,我找到了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当且仅当admin视图存在时。我们   可以为经理,用户等做同样的事情,并让它完成   每个应用程序,以决定管理员是否会看到管理员视图或   经理视图或访客视图。

所以这会占用很多冗余方法。

是否有人在此主题中有某种关注操作或有关如何执行此操作的有用信息。

1 个答案:

答案 0 :(得分:0)

你应该能够像这样创建路线:

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');
}

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