我正在尝试构建一个包含多个区域的小型 Web 应用程序:
- 用户区
- 管理员区
我正在使用 Auth 组件并在登录后进行检查,Auth->user('role')
但这不会阻止“普通用户”在 URL 中键入管理路径并访问它(他已登录)。自然,管理员应该能够访问任何区域,但这不是我当前的问题 :)
管理和更重要的是实现这些权限/身份验证的最佳方式是什么?
谢谢!
我正在尝试构建一个包含多个区域的小型 Web 应用程序:
我正在使用 Auth 组件并在登录后进行检查,Auth->user('role')
但这不会阻止“普通用户”在 URL 中键入管理路径并访问它(他已登录)。自然,管理员应该能够访问任何区域,但这不是我当前的问题 :)
管理和更重要的是实现这些权限/身份验证的最佳方式是什么?
谢谢!
有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()
orbeforeRender()
函数中这样做。
我会isAuthorized
在您的控制器中使用该功能
像这样的样本:
class PostsController extends AppController {
public function isAuthorized() {
if($this->Auth->user('role_id' != '1')) return false;
}
}
并在您的AppController beforeFilter()
添加
$this->Auth->authorize = 'Controller';