Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

修改用户角色权限时. 提交后, sys_casbin_rule 表被全部更新. 只有 common_user的信息 #539

Closed
allenLew1991 opened this issue Aug 17, 2021 · 7 comments
Labels

Comments

@allenLew1991
Copy link

image

@wenjianzhang
Copy link
Member

请详细描述您的问题!

@Air-Smile
Copy link

@wenjianzhang 这问题确实存在,如果我添加新的模块的接口(动作),那么想设置权限的时候,我发现sys_casbin_rule 表里第一次有 添加的模块权限。当我再去修改后,sys_casbin_rule 表的数据会被清除,然后再次添加进来,但却没新模块的接口权限

@allenLew1991
Copy link
Author

@Air-Smile 直接把新增加的角色v0, 新开发的接口v1 手动写进 sys_casbin_rule . 这个表. 再备份一下库表. 然后禁用一下用户角色管理. 暂时先这么搞吧

@wenjianzhang
Copy link
Member

@wenjianzhang 这问题确实存在,如果我添加新的模块的接口(动作),那么想设置权限的时候,我发现sys_casbin_rule 表里第一次有 添加的模块权限。当我再去修改后,sys_casbin_rule 表的数据会被清除,然后再次添加进来,但却没新模块的接口权限

需要将API绑定对应的按钮,然后赋权即可。

@nottellyou
Copy link

@wenjianzhang   @allenLew1991   问下:新增加接口后,将此接口对应到菜单,然后再去角色里赋值所有数据权限。为啥sys_casbin_rule表没有任何变化呢?  

@zhouxixi-dev
Copy link
Contributor

zhouxixi-dev commented Jun 9, 2022

@wenjianzhang

// Insert 创建SysRole对象
func (e *SysRole) Insert(c *dto.SysRoleInsertReq, cb *casbin.SyncedEnforcer) error {
       // .....
	_ = cb.SavePolicy()
	return nil
}

// Update 修改SysRole对象
func (e *SysRole) Update(c *dto.SysRoleUpdateReq, cb *casbin.SyncedEnforcer) error {
    // ....
    _ = cb.SavePolicy()
    return nil
}

不管是 Insert SysRole,还是 Update SysRole,里面都有一行cb.SavePolicy()的代码,这行代码会调用https://github.com/go-admin-team/gorm-adapter/blob/master/adapter.go中的SavePolicy方法,该方法会先 dropTable,然后再 createTable,如下图所示:

image

如果 go-admin 存在多个副本的情况下,有并发的新建或更新角色请求过来,sys_casbin_rule 表中的有些规则可能会丢失了。因此不应该调用 SavePolicy 方法,且多个副本情况 cb 应该设置 watcher 即可。

@goople8
Copy link

goople8 commented Jun 10, 2022

我5月也是遇到这个问题,用户反馈权限怎么忽然就没有了,后来我发现,管理员更改角色菜单授权是,点保存,会把sys_casbin_rule 表里对应角色的数据清空,然后再重新insert,可问题就是居然插入的数据有时一条都没有插进去,有时有缺少一些数据,时多时少,反正不稳定。这个地方一定要改进才行

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

6 participants