0

我正在尝试构建一个包含多个区域的小型 Web 应用程序:

  1. 用户区
  2. 管理员区

我正在使用 Auth 组件并在登录后进行检查,Auth->user('role')但这不会阻止“普通用户”在 URL 中键入管理路径并访问它(他已登录)。自然,管理员应该能够访问任何区域,但这不是我当前的问题 :)

管理和更重要的是实现这些权限/身份验证的最佳方式是什么?

谢谢!

4

2 回答 2

1

有ACL。但是,如果他们可以远离它,我会劝阻任何人不要使用 ACL。基于角色的身份验证当然很好并且易于实现。他们开始的方式是正确的,但是,您需要admin routingcore.php文件中启用。

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

完成后,编码设置准确,身份验证就位,只有具有角色的用户admin才能访问任何管理部分,例如http://www.yoursite.com/admin/users

角色基础身份验证成功的大部分魔法都是在AppController课堂上完成的。

举个例子,我会这样设置AppController.php文件:

public $components = array(
    'Cookie',
    'Session',
    'Auth' => array(
        'authenticate' => array(
            'Form' => array(
                'userModel' => 'User',
                'fields' => array(
                    'username' => 'username',
                    'password' => 'password'
                )
            )
        ),
        'logoutRedirect' => array('controller' => 'pages', 'action' => 'home'),
        'authorize' => array('Controller')
    )
);


public function isAuthorized($user){        
    if(isset($user['role']) && $user['role'] === 'admin'){
        return true;
    }
    return false;
}

如果你想要一个admin布局和一个members通用布局,你可以在beforeFilter()orbeforeRender()函数中这样做。

于 2013-01-25T20:10:19.540 回答
0

我会isAuthorized在您的控制器中使用该功能

像这样的样本:

class PostsController extends AppController {

    public function isAuthorized() {
        if($this->Auth->user('role_id' != '1')) return false;
    }
}

并在您的AppController beforeFilter()添加

    $this->Auth->authorize = 'Controller';
于 2013-01-26T09:07:58.407 回答