我正在尝试构建一个包含多个区域的小型网络应用程序:
我正在使用Auth组件并在登录Auth->user('role')
后进行检查,但这不会阻止“普通用户”在URL中键入管理路径并访问它(他已登录)。当然,管理员应该能够访问任何区域,但这不是我当前的问题:)
管理并更重要的是实现这些权限/身份验证的最佳方式是什么?
谢谢!
答案 0 :(得分:1)
有ACL。但是,如果他们可以远离它,我会阻止任何人使用ACL。角色基础身份验证当然很好并且易于实现。他们开始的方式是正确的,但是,您需要在admin routing
文件中启用core.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()
或beforeRender()
函数中执行此操作。
答案 1 :(得分:0)
我会在您的控制器中使用isAuthorized
功能
这样的样本:
class PostsController extends AppController {
public function isAuthorized() {
if($this->Auth->user('role_id' != '1')) return false;
}
}
并在AppController beforeFilter()
添加
$this->Auth->authorize = 'Controller';