【问题标题】:CakePHP: Can you use admin prefix with pages?CakePHP:你可以在页面中使用管理员前缀吗?
【发布时间】:2013-05-07 05:48:20
【问题描述】:

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

【问题讨论】:

  • 本教程book.cakephp.org/2.0/en/tutorials-and-examples/… 向您展示了如何完成此操作的基础知识。整个教程很有用,但链接到的部分与您想要做的事情相关。
  • 谢谢,但我已经阅读该章节好几天了,它根本没有谈论 PagesController。我的其他控制器工作正常,但它没有帮助我在 page 上授权用户
  • 如果您使用 PagesController 的显示操作,它将允许任何用户查看它。尝试创建一个以 admin_ 为前缀的单独操作,并使用它来驱动仪表板。 book.cakephp.org/2.0/en/controllers/pages-controller.html
  • 我们已经尝试过了,但它的表现不如预期。我不记得确切的问题。 PagesController 的行为似乎与其他控制器不同。
  • PagesController 与所有其他控制器相同,默认 routes.php 配置将所有 PagesController 请求(/pages/*)发送到 display() 操作。您还需要对其进行修改以确保您的请求被正确路由。

标签: php cakephp authorization cakephp-2.0 cakephp-2.3


【解决方案1】:

页面是什么意思? PagesController 或位于您的 webroot 中的 .htm(l) 文件提供的静态文件?

如果你的情况是第一件事,你可以为页面控制器实现这个逻辑。 如果是第二个 - 请求根本不通过 CakePHP(或任何其他服务器端脚本),所以不,您无法通过 Cake 控制对它的访问。

如果您的情况不同,请完善您的问题,我很乐意为您提供帮助。

正如评论所暗示的那样,您处于第 1 种情况。在 PagesController 的类声明中它说:

class PagesController extends AppController {

这意味着您可以在扩展 AppController 的任何类中使用 AppController 中的任何逻辑。因此,您可以在 PagesController 中使用isAuthorized()

您需要做的就是创建一个名称与“管理仪表板视图”相同的方法,并只允许管理员访问它。或者只是检查用户角色。

【讨论】:

  • 这是第一个。我想要求管理员角色来查看由 PagesController 提供的特定页面
【解决方案2】:

假设第一个参数是请求的页面,你可以使用这个语句捕获它:

$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:有时您需要查看较旧的书籍以找到您真正需要的内容。快乐编码!

【讨论】:

    猜你喜欢
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 2017-04-03
    • 1970-01-01
    • 2013-08-23
    相关资源
    最近更新 更多