在我的控制器中,我通过在我的函数前面加上前缀admin_
然后让 AppControllerisAuthorized()
函数检查用户是否是管理员来限制访问。有没有办法用页面(来自 PageController)来做到这一点?我们创建了一个管理员主页(如仪表板),如果用户未登录,则无法查看该主页,但非管理员用户可以查看。我不知道如何防止这种情况。
问问题
315 次
2 回答
1
假设第一个参数是请求的页面,您可以使用以下语句捕获它:
$this->request->pass[0];
你可以使用 isAuthorized 函数来解决你的问题,做这样的事情......
public function isAuthorized()
{
$page = strtolower($this->request->pass[0]);
if ($page = 'admin_page')
{
if ( $this->Auth->user('Role.role_field') == 'Admin' )
{
return TRUE;
}
else
{
return FALSE;
}
}
else
{
// This will authorize users for the other pages
return TRUE;
}
}
希望这可以帮助。始终查看 CookBook:有时您需要查看较旧的书籍以找到您真正需要的内容。快乐编码!
于 2013-05-06T21:48:20.763 回答
1
页面是什么意思?由PagesController提供的静态文件或位于 webroot 中的.htm(l)文件?
如果您的情况是第一件事,您可以为 Pages Controller 实现此逻辑。如果是第二个 - 请求根本不通过 CakePHP(或任何其他服务器端脚本),所以不,你不能通过 Cake 控制对它的访问。
如果您的情况是其他情况,请完善您的问题,我很乐意提供帮助。
正如评论所暗示的那样,您处于第 1 种情况。在 PagesController 的类声明中它说:
class PagesController extends AppController {
这意味着您可以在扩展 AppController 的任何类中使用 AppController 中的任何逻辑。因此您可以isAuthorized()
在 PagesController 中使用。
您需要做的就是创建一个名称与“管理仪表板视图”相同的方法,并只允许管理员访问它。或者只是检查用户角色。
于 2013-04-26T14:07:13.387 回答