gpt4 book ai didi

authentication - CakePHP - 将编辑限制为您自己的 "data"

转载 作者:行者123 更新时间:2023-12-01 04:09:58 25 4
gpt4 key购买 nike

目前我使用 Auth 组件让用户登录/注销 - ACL 被定义为在用户组( guest 、用户、管理员)之间进行排序 - 有明显的限制;管理员可以访问所有内容,用户只能访问用户 Controller 中的编辑,而访客只能看到显示/索引/ View 等。

现在为了防止用户编辑另一个用户 - 我有一个名为 isOwner() 的函数,它基本上检查您是否正在尝试编辑自己的个人资料;并检查是否是管理员尝试编辑。如果用户是他们正在尝试编辑的内容的所有者,那么它会允许它,否则它只会使用 Flash 消息进行重定向。

通读http://book.cakephp.org/view/1245/Defining-Permissions-Cake-s-Database-ACL - 我想知道是否可以在 ACL 中定义它?

类似于以下内容:

$this->Acl->allow(array('model' => 'User', 'foreign_key' => $id), 'Users', 'edit', $id) 

虽然我没有深入挖掘,但我假设我必须为每个注册的新用户使用上述行进行某种 beforeSave() 以允许编辑他的个人资料。

最佳答案

[我决定将此作为答案发布,因为它包含代码示例]

您可以创建一个组件(或一个函数)并在 app_controller 中使用 beforeFilter() 回调,这样您就不需要手动将函数添加到所有 Controller 。

您也可以为操作使用多个前缀(请参阅核心中的 Routing.prefixes),这样可以更轻松地控制访问。就像是:

[app_controller.php]

function beforeFilter() {
if(isset($this->params['prefix']) && $this->params['prefix'] == 'admin'){
if(!isAdmin() || !isOwner())
$this->cakeError('error404');
}
}

[users_controller.php]
  function admin_edit($id = null){
... // edit as usual
}

在 LAMP 堆栈中,您的瓶颈通常在数据库

我对蛋糕的问题是它提出的查询数量。一旦我看到我的“联系人”页面进行了 21 次查询,只是为了检索数据结构和此公共(public)页面的权限。

证明使用 ACL 访问数据的唯一方法是权限是动态的,即“用户#29 可以编辑用户#12,因为管理员在后台决定了它”。但是,如果您有访问数据的静态规则(例如“用户只能编辑自己的信息而管理员可以编辑所有内容”),那么在您已经知道答案的情况下执行查询是没有用的,因为这些规则不会及时更改。

所以这一切都取决于你的应用程序。最后,最后一个想法,如果你仍然打算进行更多查询 =P 你可以 set the authorize method of the Auth component .但是为此使用 ACL 组件,在我看来是个坏主意

干杯!

关于authentication - CakePHP - 将编辑限制为您自己的 "data",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6762738/

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