2014-05-16 37 views
0

目前我正在实施我自己的ACL系统。 为了限制数据库动作,我重写了ActiveRecord类别beforeSave函数YII ACL查找BeforeSave访问控制

我正在实现我的功能作为默认模型类。

class Event extends ACL 
{ 

... 

} 

到目前为止好。在我的数据库中,我有一个特权表,用于存储与特定表格上的操作相关的用户,组,创建者或自我角色。我使用标准RBACyii页面限制基于用户级别所以我不必检查每个页面加载的所有权限。 ACL行为仅用于与数据库相关的目的。就像用户希望看到帖子/ someid /视图一样,并且他没有针对该特定帖子访问权限的权限。

例如角色:一群:4动作:插入表:事件

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

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

回答

0

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

从理论上讲,只要重写find()-函数就可以避开它,并且禁止它返回一个ActiveQuery实例。不幸的是,框架函数本身并不检查它们是否有实例,并且无论如何都会调用它的方法。所以期待那里的问题。

实际上,您最终必须重写其余的(lineOneOne等)。这仍然让人们有可能使用默认的ActiveRecord或数据库连接本身。

说实话,我看不到一个用于试图增加安全性这个低。我相当肯定,无论你需要做些什么来获得这个“安全”,它都会让人不得不维护它。