0

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

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

class Event extends ACL
{

...

}

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

举例角色:Group Who:4 Action:insert Table:Event

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

有人知道我可以在哪里侵入系统并控制让我们调用它beforeFind功能吗?

4

1 回答 1

0

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

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

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

老实说,我看不到尝试增加这么低的安全性的单一用途。而且我相当肯定,无论你需要做什么来获得这个“安全”,它都会给必须维护它的人带来地狱。

于 2014-05-27T13:00:02.743 回答