哪个是限制访问我的网站中某些页面的最佳方式,使用cakephp限制管理员以外的某些用户

时间:2013-10-29 11:00:23

标签: cakephp cakephp-2.0

我有一个网站,公众可以访问所有页面,除了一个用户特定的版本页面或者特定组。我有一个单独的登录页面,可以根据身份验证访问“版本”页面。我该如何解决这个问题?使用Acl或授权功能?我很困惑。我也需要使用相同的用户表来验证此页面,在这种情况下,我是否将此用户登录页面用作我的其他用户的一个元素登录页面。有人可以提示我如何继续吗?

3 个答案:

答案 0 :(得分:1)

ACL在许多情况下都是过度的。

我通常在我的控制器中做的是这样的事情:

public function releases() {

    $this->_allowedGroups(array(1,2,3));

    // rest of code here

}

然后在我的app控制器中:

public function _allowedGroups($groups=array()) {

    if( !in_array($this->Auth->user('group_id'), $groups) ) {

       $this->redirect(array('controller'=>'users', 'action'=>'login'));

    }


}

答案 1 :(得分:0)

Acl应该做你的工作。 您是否有特殊需要使用单独的登录页面?

如果您实施acl,单个登录页面和单个用户表应该足以满足您的需求。只有那些有权查看“请求”页面的用户才可以这样做。

答案 2 :(得分:0)

你可以这样做......

在core.php上,放

Configure::write('Routing.prefixes', array('release'));

并在AppController上进行验证:

class AppController extends Controller{
    public function beforeFilter(){
        if (isset($this->params['prefix']) and $this->params['prefix'] == 'release'){
            if ($this->Session->read("User.type") != 'admin'){
                    //redirect the user or throw an error...
            }
        }
    }
}

因此,youdomain.com/release/*只能由您的管理员访问...

另外,我不明白为什么你需要两个登录页面...你可以在你的用户桌面上放一个标志,说明用户是否是管理员......在登录时,设置用户。在会话上输入属性。

如果您不需要复杂的权限控制,我认为您不需要使用ACL。