Php YII ACL beforeFind beforeforesave访问控制

Php YII ACL beforeFind beforeforesave访问控制,php,security,frameworks,access-control,yii2,Php,Security,Frameworks,Access Control,Yii2,目前我正在实现自己的ACL系统。 为了限制数据库操作,我从ActiveRecord类中重写了beforeSave函数 我将我的函数作为默认模型类实现 class Event extends ACL { ... } 到目前为止还不错。在我的数据库中,我有一个特权表,我在其中存储与特定表上的操作相关的用户、组、创建者或自我角色。我使用标准的RBACfromyii进行基于用户级别的页面限制,因此我不必检查每个页面加载的所有权限。ACL行为仅用于与数据库相关的目的。比如,如果一个用户想要查看pos

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

我将我的函数作为默认模型类实现

class Event extends ACL
{

...

}
到目前为止还不错。在我的数据库中,我有一个特权表,我在其中存储与特定表上的操作相关的用户、组、创建者或自我角色。我使用标准的RBACfromyii进行基于用户级别的页面限制,因此我不必检查每个页面加载的所有权限。ACL行为仅用于与数据库相关的目的。比如,如果一个用户想要查看post/someid/view,而他没有权限访问特定的post,那么就不授予访问权限

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

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


有人知道我可以在哪里侵入系统并控制我们在查找之前称之为函数吗?

您可能需要从自己的类派生基于
ActiveRecord的类,而不是从
框架\db
-one派生。如果您这样做,那么您可以在任何地方/以任何方式添加支票

从理论上讲,您只需重写
find()
-函数,并禁止它返回
ActiveQuery
实例,就可以避免这种情况。不幸的是,框架函数本身不检查是否有实例,并且无论如何都会调用实例上的方法。因此,预计会出现问题

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

老实说,我看不出一个单一的用途,试图增加安全性这么低。我相当确信,无论你需要做什么来确保这个“安全”,它都会给维护它的人带来地狱