在我的CakePHP应用程序中,我已应用Url验证,以便管理员只能访问为admin定义的操作和用户相同的操作。 在我的申请中," surveylist"是管理员的操作,当任何用户直接访问该操作(监控列表)时,URL验证工作(显示未授权的访问消息)。 但是在那个消息下面,监视列表的ctp文件强制执行并显示错误,因为我已通过try-catch块验证了URL,并且无法获取设置的操作变量。 如果出现unauthorize错误,我希望不能执行ctp文件。
我的监控记录代码是: -
public function surveylist($pg=null){
try{
if($this->checkPageAccess($this->params['controller'] . '/' . $this->params['action'])){
$this->Paginator->settings = array(
'Survey' => array(
'limit' => 5,
'order' => 'created desc',
'conditions'=>array('is_deleted'=> 0),
'page' => $pg
)
);
$numbers = $this->Paginator->paginate('Survey');
$this->set(compact('numbers'));
}else{
$this->Flash->set(__('Unauthorised access'));
}
}catch(Exception $e){
$this->Flash->set(__($e->getMessage()));
}
}
如果控件进入其他地方,我不希望执行监控列表的ctp文件。 Plz,救救我...... Thanx提前...
答案 0 :(得分:0)
我认为您使用前缀来分隔管理员和用户,如果不是,请这样做是处理和限制方法的好方法。
执行此操作后,您必须设置条件以检查哪个前缀(admin,user)当前处于活动状态,并根据该加载Auth组件并允许在Auth的allow()方法中执行操作。
示例:
$this->loadComponent('Auth',[
/*'authorize' => [
'Acl.Actions' => ['actionPath' => 'controllers/']
],*/
'loginRedirect' => [
'controller' => 'Users',
'action' => 'index'
],
'authenticate' => [
'Form' => [
'fields' => [
'username' => 'email',
'password' => 'password'
]
]
],
'loginAction' => [
'controller' => 'Users',
'action' => 'login'
],
'unauthorizedRedirect' => [
'controller' => 'Users',
'action' => 'login',
'prefix' => false
],
'authError' => 'You are not authorized to access that location.',
]);
if ($this->request->params['prefix']=='admin') {
// Put actions you want to access to admin in allow method's array
$this->Auth->allow(array('add', 'edit', etc...));
} else if ($this->request->params['prefix']=='user') {
// Put actions you want to access to user in allow method's array
$this->Auth->allow(array('login', 'view', etc...));
}
这样您就可以限制特定角色的操作。
希望这有帮助!