除了使用cakephp的管理员之外,哪种方法是限制某些用户访问我网站中某些页面的最佳方法

除了使用cakephp的管理员之外,哪种方法是限制某些用户访问我网站中某些页面的最佳方法,cakephp,cakephp-2.0,Cakephp,Cakephp 2.0,我有一个网站,除了一个特定于用户或特定组的发布页面外,所有页面都可供公众访问。我有一个单独的登录页面,可以基于身份验证访问“发布”页面。我该怎么做?使用Acl或授权功能?我很困惑。我还需要使用相同的用户吗用于验证此页面的表,在这种情况下,我是否将此用户登录页面用作其他登录页面中的元素。有人可以提示我如何继续吗?Acl应该完成您的工作。 您是否需要使用单独的登录页面 如果您实现acl,一个登录页面和一个用户表应该足以满足您的需要。只有那些有权查看请求页面的用户才能这样做 ACL在许多情况下都是过度

我有一个网站,除了一个特定于用户或特定组的发布页面外,所有页面都可供公众访问。我有一个单独的登录页面,可以基于身份验证访问“发布”页面。我该怎么做?使用Acl或授权功能?我很困惑。我还需要使用相同的用户吗用于验证此页面的表,在这种情况下,我是否将此用户登录页面用作其他登录页面中的元素。有人可以提示我如何继续吗?

Acl应该完成您的工作。 您是否需要使用单独的登录页面


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

ACL在许多情况下都是过度使用

我通常在控制器中执行以下操作:

public function releases() {

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

    // rest of code here

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

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

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

    }


}
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...
            }
        }
    }
}
然后在我的应用程序控制器中:

public function releases() {

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

    // rest of code here

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

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

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

    }


}
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...
            }
        }
    }
}

你可以这样做

在core.php上,将

Configure::write('Routing.prefixes', array('release'));
并在AppController上执行验证:

public function releases() {

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

    // rest of code here

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

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

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

    }


}
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/*只能由管理员访问

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


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

我有另一个页面,登录是该页面的一部分,它提供对发布页面的访问,而不是单击发布页面,然后提供用户登录以帮助登录。我使用了ACL,但它工作不正常,允许任何人访问任何页面,尽管有所有的允许和拒绝权限。您可以添加您在使用ACL时所面临的问题是一个不同的问题,而get的解决方法是防止ACL,因为它通常是开销。如果对你有用,试试看。同意。我通常在AppController中创建一个函数,该函数包含3个参数:定义对象类型的标识符(文章、组、图像、用户,你可以命名)、所述对象的ID,以及我想要执行的最后一个操作,这通常是四个CRUD操作(创建、读取、更新、删除)之一。显然,Create的ID为null。如果我有3组人-1:可以访问前端和后端的管理员2:可以访问发布页面和其他前端页面的人员3:可以访问除发布之外的所有前端页面的用户,我的应用程序控制器中的这段代码是否有效?您应该能够适应上述情况。在“特殊情况”控制器方法中,您需要做的就是提供可以在$this->u alloweGroups(数组(…)中访问该资源的组ID;如果($this->Auth->user('group_id')==1){$this->Auth->allow('*');}elseif($this->Auth->user('group_id')==2){$this->Auth->allow('releases');}elseif($this->Auth->user(group_id==3)){$this->Auth->allow('index','view')}我需要几个管理员以外的用户才能看到这些页面,所以我应该有两个组,管理员可以访问包括后端在内的所有页面,可能还有员工可以访问所有页面和发布页面,排除管理员页面,而公众可以访问除发布之外的所有前端页面