Cakephp:AuthComponent 评估顺序以及如何重定向到操作
Cakephp: AuthComponent Evaluation Order and how to redirect to an action
大家好,关于 auth 组件,我正在做一些测试以更好地理解该工具,在概念探索中,我希望授权经过身份验证的管理员用户访问任何操作,但如果授权用户具有 "supervisor" 角色只能对 "RequestsController.php" 中的动作进行索引、查看和编辑,我正在尝试这种方法:
1) 允许管理员角色的一切,拒绝 AppController.php 中其他任何人的一切。
2) 在 "RequestsController.php" 中明确允许 "supervisor" 并拒绝任何其他角色。
怀疑是,经过一些测试后发生的情况是,如果我只在 AppController.php 中授权管理员用户,重定向只允许我转到 /webroot/,但如果我在 RequestsController.php。我可以毫无问题地看到请求
AppController 中的 IsAuthorize 方法
public function isAuthorized($user)
{
//privileges 1 means admin
if ($user['privileges']==1){
debug($user);
return true;
} else {
debug($user);
return false;
}
}
请求控制器中的 IsAuthorize 方法
public function isAuthorized($user)
{
//privileges 9 means supervisor
if ($user['privileges']==9){
debug($user);
$action = $this->request->getParam('action');
if (in_array($action, ['index', 'view', 'edit'])) {
debug($user);
return true;
}
return false;
} else {
debug($user);
return false;
}
}
因为我不清楚 isAuthorized 函数的处理顺序,或者为什么重定向到请求(即使它是 "AppController.php" 或 "RequestsController.php")所以这让我觉得我必须明确授权所有控制器中的管理员角色
当使用 ControllerAuthorize
时,AuthComponent
将仅在 active 控制器上调用 isAuthorized()
方法。因此,在您的示例中,当从 RequestsController
请求任何操作时,只会调用 RequestsController::isAuthorized()
,不允许访问具有 9.
以外特权的用户
如果您也想允许管理员用户访问,您应该按如下方式更改 RequestsController::isAuthorized()
:
public function isAuthorized($user)
{
//privileges 9 means supervisor
if ($user['privileges']==9){
debug($user);
$action = $this->request->getParam('action');
if (in_array($action, ['index', 'view', 'edit'])) {
debug($user);
return true;
}
return false;
} else {
debug($user);
return parent::isAuthorized($user); //changed this line
}
}
大家好,关于 auth 组件,我正在做一些测试以更好地理解该工具,在概念探索中,我希望授权经过身份验证的管理员用户访问任何操作,但如果授权用户具有 "supervisor" 角色只能对 "RequestsController.php" 中的动作进行索引、查看和编辑,我正在尝试这种方法: 1) 允许管理员角色的一切,拒绝 AppController.php 中其他任何人的一切。 2) 在 "RequestsController.php" 中明确允许 "supervisor" 并拒绝任何其他角色。
怀疑是,经过一些测试后发生的情况是,如果我只在 AppController.php 中授权管理员用户,重定向只允许我转到 /webroot/,但如果我在 RequestsController.php。我可以毫无问题地看到请求
AppController 中的 IsAuthorize 方法
public function isAuthorized($user)
{
//privileges 1 means admin
if ($user['privileges']==1){
debug($user);
return true;
} else {
debug($user);
return false;
}
}
请求控制器中的 IsAuthorize 方法
public function isAuthorized($user)
{
//privileges 9 means supervisor
if ($user['privileges']==9){
debug($user);
$action = $this->request->getParam('action');
if (in_array($action, ['index', 'view', 'edit'])) {
debug($user);
return true;
}
return false;
} else {
debug($user);
return false;
}
}
因为我不清楚 isAuthorized 函数的处理顺序,或者为什么重定向到请求(即使它是 "AppController.php" 或 "RequestsController.php")所以这让我觉得我必须明确授权所有控制器中的管理员角色
当使用 ControllerAuthorize
时,AuthComponent
将仅在 active 控制器上调用 isAuthorized()
方法。因此,在您的示例中,当从 RequestsController
请求任何操作时,只会调用 RequestsController::isAuthorized()
,不允许访问具有 9.
如果您也想允许管理员用户访问,您应该按如下方式更改 RequestsController::isAuthorized()
:
public function isAuthorized($user)
{
//privileges 9 means supervisor
if ($user['privileges']==9){
debug($user);
$action = $this->request->getParam('action');
if (in_array($action, ['index', 'view', 'edit'])) {
debug($user);
return true;
}
return false;
} else {
debug($user);
return parent::isAuthorized($user); //changed this line
}
}