【问题标题】:YII ACL beforeFind BeforeSave Access controllYII ACL beforeFind Before Save 访问控制
【发布时间】:2014-05-16 12:49:28
【问题描述】:

目前我正在实施自己的 ACL 系统。 为了限制数据库操作,我重写了 ActiveRecord class 中的 beforeSave function

我正在将我的函数实现为默认模型类。

class Event extends ACL
{

...

}

到目前为止一切顺利。在我的数据库中,我有一个权限表,其中存储与特定表上的操作相关的用户、组、创建者或自我角色。我使用来自 yii 的标准 RBAC 进行基于 user-level 的页面限制,因此我不必检查每个页面加载时的所有权限. ACL 行为仅用于与数据库相关的目的。就像用户想要查看帖子/someid/view 并且他无权获得该特定帖子的访问权限是不被授予的。

通过示例角色:组谁:4 操作:插入表:事件

现在 ID 为 4 的组有权插入到事件表中。这部分工作正常,现在我希望能够限制某些用户在我的数据库中搜索表。如果“角色”是“用户”,则相同。在文档中我找不到类似 beforeFind 的内容。

有人知道我在哪里可以侵入系统并控制我们称之为 beforeFind 功能吗?

【问题讨论】:

    标签: php security frameworks access-control yii2


    【解决方案1】:

    您可能必须从您自己的类而不是framework\db-one 派生基于ActiveRecord 的类。如果你这样做了,那么你可以在任何地方/任何你想要的地方添加检查。

    理论上,您应该能够只覆盖find()-函数并禁止它返回ActiveQuery 实例。不幸的是,框架函数本身不会检查它们是否有一个实例,并且无论如何都会调用它的方法。所以期待那里的问题。

    实际上,您最终还必须覆盖其余部分(行 findOne 等)。这仍然使人们可以使用默认的 ActiveRecord 或数据库连接本身。

    老实说,我看不出尝试将安全性提高到如此低的水平。而且我相当肯定,无论你需要做什么来获得这个“安全”,它都会给必须维护它的人带来地狱。

    【讨论】:

      猜你喜欢
      • 2013-11-24
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-02
      相关资源
      最近更新 更多