hyperf-casbin
hyperf-casbin copied to clipboard
添加或删除用户角色权限后,Enforcer::enforce检查部分错误
hyperf环境下
A用户在浏览器a对B用户修改角色权限 Enforcer::addRoleForUser("user{$userId}", "role{$roleId}"); Enforcer::addRoleForUser("user{$userId}", "role{$roleId}", '*');
Enforcer::deleteRoleForUser("user{$userId}", "role{$roleId}"); Enforcer::deleteRoleForUser("user{$userId}", "role{$roleId}", '*');
A用户修改B用户是,通过Enforcer::getRolesForUser查询的角色信息
string(54) "这是修改前前前前前前的权限信息 == 27381"
array(0) {
}
string(54) "这是修改后后后后后后的权限信息 == 27381"
array(1) {
[0]=>
string(6) "role22"
}
B用户在浏览器b登录
通过 Enforcer::enforce("user{$adminId}", $obj, $act);
获取部分权限时正常,部分权限不正常
B用户请求,通过Enforcer::getRolesForUser查询的角色信息
string(36) "这是查询的权限信息 == 27381"
array(1) {
[0]=>
string(6) "role22"
}
string(36) "这是查询的权限信息 == 27381"
array(1) {
[0]=>
string(6) "role22"
}
string(36) "这是查询的权限信息 == 27381"
array(0) {
}
string(36) "这是查询的权限信息 == 27381"
array(0) {
}
string(36) "这是查询的权限信息 == 27381"
array(0) {
}
请问是否是内存更新不及时导致的?
内存更新不及时,这边在 Enforcer::enforce("user{$adminId}", $obj, $act);
前,添加 Enforcer::loadPolicy();
查询就正常,但是不添加就会出现以上问题
注意API参数,对比数据库记录,如果是旧版本,先升级
版本是3.6的,有试过升级,也是会出现相同的问题 API参数的话,像下面俩个都是尝试过的 Enforcer::deleteRoleForUser("user{$userId}", "role{$roleId}"); Enforcer::deleteRoleForUser("user{$userId}", "role{$roleId}", '*');
另外还有一个问题是,adapter为Mysql\DatabaseAdapter,然后修改权限,每次都是每次都创建一个新的sql连接吗?这边试过有些修改过多,会导致hyperf的数据库连接池too many,需要修改max_connections之类的