有人可以请把这个英文给我PHP PHP CakePHP
对不起,有点愚蠢的屁股,但我试图学习,并一直在看这几天,但我仍然不完全确定它是如何工作的。 我正在关注使用前缀的离线教程。
本教程说明了这一点:1 - 取消注释core.php中的管理路由前缀
2 - 将以下内容添加到users_controller.php:
public function dashboard() {
$role = $this->Auth->user('role');
if (!empty($role)) {
$this->redirect(array($role=>true, 'action'=>'dashboard'));
}
}
public function admin_dashboard() {
}
public function manager_dashboard() {
}
3 - 为上述创建三个视图
4 - 在app_controller中添加适当设置的授权和会话组件,然后添加:
public function isAuthorized() {
$role = $this->Auth->user('role');
$neededRole = null;
$prefix = !empty($this->params['prefix']) ? $this-
>params['prefix'] : null;
if (!empty($prefix) && in_array($prefix,
Configure::read('Routing.prefixes'))) {
$neededRole = $prefix;
}
return (empty($neededRole) || strcasecmp($role, 'admin') == 0 ||
strcasecmp($role, $neededRole) == 0);
}
5 - 在默认布局中:
<?php
$dashboardUrl = array('controller'=>'users', 'action'=>'dashboard');
if (!empty($user['role'])) {
$dashboardUrl[$user['role']] = true;
}
echo $this->Html->link('My Dashboard', $dashboardUrl);
?>
现在整个事情都起作用了,我可以跟随大部分发生的事情,但我对isAuthorized方法的最后一行感到困惑。 究竟是什么:
return (empty($neededRole) ||
strcasecmp($role, 'admin')== 0 ||
strcasecmp($role, $neededRole) == 0);
实际返回?
另外,上面的代码工作正常,当我以管理员身份登录时,他们可以查看admin_dashboard,但看起来其他任何链接似乎都有管理员前缀。 我如何阻止这种情况发生? 我不想为包括主页在内的所有内容创建一个admin_方法!
empty($neededRole) ||
strcasecmp($role, 'admin') == 0 ||
strcasecmp($role, $neededRole) == 0
所需的角色是空白/空的:空($ neededRole)或
在不区分大小写的情况下比较时,角色是'admin':strcasecmp($ role,'admin')== 0或者
当以不区分大小写的方式进行比较时,角色与所需角色相同。
所以如果它不需要角色或者角色是admin,或者角色与所需角色相同,则返回true,否则返回false。
为了解决你的问题的第一部分...
return (empty($neededRole) || strcasecmp($role, 'admin') == 0 || strcasecmp($role, $neededRole) == 0);
这返回一个布尔值。 重新安排它,这样做更有意义一点:
return (
empty($neededRole)
|| strcasecmp($role, 'admin') == 0
|| strcasecmp($role, $neededRole) == 0
);
因此,如果满足以下三个条件中的任何一个,它将返回true:
empty($neededRole)
是true
strcasecmp($role, 'admin')
等于0 strcasecmp($role, $neededRole)
等于0 根据文件,如果两个参数相同,那么最后两个将等于零。 所以,如果出现以下情况,函数将返回true
$neededRole
值或; $role
与“admin”或者“ $role
如果与$neededRole
相同 如果这些条件都不符合,它将返回false
。
从文档http://php.net/manual/en/function.strcasecmp.php strcasecmp
比较字符串忽略大小写,如果它们相同返回0,所以最后一行说:
If the needed role is empty (you don't need a role)
You are authorized
OR IF your role is 'admin'
You are authorized
OR IF your role is the needed role
You are authorized
ELSE
You are not authorized
至于你的其他问题,我不确定,但我很确定你确实需要一个admin_*
方法,但是这些方法可以委托给不需要特殊逻辑的普通方法。
上一篇: can someone please put this in english for me PHP Cakephp