hyperf-casbin icon indicating copy to clipboard operation
hyperf-casbin copied to clipboard

添加或删除用户角色权限后,Enforcer::enforce检查部分错误

Open domecc opened this issue 2 years ago • 3 comments

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) {
}

请问是否是内存更新不及时导致的?

domecc avatar Mar 03 '22 02:03 domecc

内存更新不及时,这边在 Enforcer::enforce("user{$adminId}", $obj, $act); 前,添加 Enforcer::loadPolicy(); 查询就正常,但是不添加就会出现以上问题

domecc avatar Mar 03 '22 02:03 domecc

注意API参数,对比数据库记录,如果是旧版本,先升级

donjan-deng avatar Mar 03 '22 03:03 donjan-deng

版本是3.6的,有试过升级,也是会出现相同的问题 API参数的话,像下面俩个都是尝试过的 Enforcer::deleteRoleForUser("user{$userId}", "role{$roleId}"); Enforcer::deleteRoleForUser("user{$userId}", "role{$roleId}", '*');

另外还有一个问题是,adapter为Mysql\DatabaseAdapter,然后修改权限,每次都是每次都创建一个新的sql连接吗?这边试过有些修改过多,会导致hyperf的数据库连接池too many,需要修改max_connections之类的

domecc avatar Mar 03 '22 03:03 domecc