每个bjyauthorize.global文件都有一个'allow'部分,其中包含一个数组。
'rule_providers' => array(
'BjyAuthorize\Provider\Rule\Config' => array(
'allow' => array(
// allow guests and users (and admins, through inheritance)
// the "wear" privilege on the resource "pants"
array(array('guest', 'user'), 'pants', 'wear')
),
'deny' => array(
// ...
),
),
),
此数组包含所有允许的角色。但这些角色是硬编码的。我只想通过函数从表中返回那些数组。我怎么能这样做?..请指教.....
答案 0 :(得分:0)
好的。可能有各种方法来实现这一点,我很确定你会遇到麻烦,但你可以在module.php中的onBootstrap方法中覆盖配置。
../项目/模块/应用程序/ Module.php
public function onBootstrap(MvcEvent $e) {
$eventManager = $e->getApplication()->getEventManager();
$serviceManager = $e->getApplication()->getServiceManager();
$config = $serviceManager->get('Config');
// You'll need to get the information from the DB here
var_dump($config['bjyauthorize']['rule_providers']);exit;
}
从这里开始,你应该没问题,只需从你的数据库中获取信息,并用db中的角色覆盖$config['bjyauthorize']['rule_providers']
。
编辑:我不熟悉bjyauthorize模块,但我非常确定它有添加或删除ACL条目的方法。偷看模块代码并查看是否可以找到任何和/或它提供其服务中的任何方法都是一个好主意。如果它确实这可能是一种更好的解决方案,然后覆盖配置。
答案 1 :(得分:0)
嘿,我找到了答案.......这可以通过覆盖bjyauthorize规则和资源类来完成。通过bjyauthorize.global.php提供的数组分别被过滤到其规则和资源类中。只需编写自己的资源和规则类,而不是硬编码,在其get方法中,打开一个表网关,连接到DB并引入信息......:)