0

在我的控制器中,我通过在我的函数前面加上前缀admin_然后让 AppControllerisAuthorized()函数检查用户是否是管理员来限制访问。有没有办法用页面(来自 PageController)来做到这一点?我们创建了一个管理员主页(如仪表板),如果用户未登录,则无法查看该主页,但非管理员用户可以查看。我不知道如何防止这种情况。

4

2 回答 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 回答