gpt4 book ai didi

php - 我如何限制 CakePHP 中的某些内容?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:36:50 26 4
gpt4 key购买 nike

我对使用 CakePHP 还很陌生,但我已经发现它对于快速开发网络应用程序非常有用。

但是,我想知道是否有一种方法可以以非标准方式限制对某些对象的访问。例如,如果我要创建一个允许用户创建“站点”的单个 CMS 系统,我如何断言用户(多个)可以访问该特定站点?

我可以在我的站点 Controller 中检查这个,但是我是否需要为我站点上的每个 Controller 检查这个 - 例如,我需要检查正在编辑的当前页面、新闻、联系人、文件等是否属于网站 ID 和用户有权编辑它?

即 thecms.com/pages/edit/123(我如何确定用户 9 可以编辑属于站点 2 的页面 123)

我假设这超出了 ACL 可以提供的范围,因为它们是特定于实体的。有什么简单的方法可以做到这一点吗?

最佳答案

我假设您已经了解 CakePHP 的 AuthACL组件,它可以提供限制内容的方法。但你说的也是真的:CakePHP 的 ACL 是“特定于实体”的,而不是“每条记录”基础的最佳选择(例如,用户 3 不应访问第 7 条)。所以我提出这个代码;试试看,让我知道:

在 app/app_controller.php 文件中:

<?php
class AppController extends Controller {
function checkPermission($aro, $aco, $loggedUserRole = 'User') {
if ($loggedUserRole != 'Admin') {
$permission = ($aro == $aco);
if (!$permission) {
$this->Session->setFlash('You cannot access that.');
$this->redirect('/somewhere');
}
}
}
}

然后,在您要限制的操作中,放入:

$this->checkPermission($this->Auth->user('id'), $someId, $this->Auth->user('role'));

因此,checkPermission() 函数执行以下操作:

调用时,您传递要授权的用户的 ID、用户尝试访问的事物的 ID,以及角色(因此假定在users 表;另外,$this->Auth->user('id') 表示 Auth 组件自动存储的用户 session 数据)。 checkPermission() 方法然后检查传递的角色是否不是 管理员(假设将有管理员可以访问所有角色),然后检查 $aro 和 $aco 参数是否相等。如果不是,则它会重定向到某个地方并显示“禁止”消息。

现在,$aco 参数可以是多种多样的东西。例如,假设您正在创建一个用于编辑用户帐户的函数,该函数采用 $userId 参数。因此,您将登录用户的 ID(来自 $this->Auth->user('id'))与传递的 $userId 进行比较。如果不相等,则意味着登录用户不应编辑该用户记录。

另一个例子:您有一个删除文章的操作,它接受一个 $articleId 参数。您可以从数据库中获取文章,然后将文章的 user_id 值作为 $aco 传递,删除文章之前。同样,如果 user_id 不是他,则登录用户将被踢出。

我希望这个解决方案能为您服务。

关于php - 我如何限制 CakePHP 中的某些内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5362508/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com