Golang Go语言中RBAC模型如何定义权限,以及处理的时机?
Golang Go语言中RBAC模型如何定义权限,以及处理的时机?
目前用 golang 的 casbin 库来实现 RBAC 模型做基本的权限控制。有几下几点:
- 如果需要一个超级管理员,就是那种不能创建不能删除的、有所有权限的用户,这个用户的权限操作怎么能合并入普通角色的处理逻辑中呢?比如现在创建一个用户,我就是直接判断如果他的角色是超级管理员就不允许创建。但是感觉这种方式有点 hard code 的感觉。
- 权限的粒度。比如修改自己的密码和修改别人的密码这种请求肯定是不同的权限操作。但是这种权限的判断如果放在业务逻辑代码中是否侵入性会过强?
更多关于Golang Go语言中RBAC模型如何定义权限,以及处理的时机?的实战教程也可以访问 https://www.itying.com/category-94-b0.html
控制到对应 url 及请求方式就够了,那种什么修改自己还是修改别人密码的特殊逻辑就放到业务逻辑。
更多关于Golang Go语言中RBAC模型如何定义权限,以及处理的时机?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
不需要存在什么超级管理员,只需要初始化一个用户,一个管理员角色,以及给管理员角色初始化必要的权限并把这个用户添加到角色就行了。
权限的粒度一般都是一个独立的操作,大部分这种独立操作都能对应到 1 个或多个接口。所以,我可以在网关上面根据 url 来实现鉴权。从而使用户 /角色 /权限能够抽象出来,成为独立于业务存在通用能力。
其实就是想内置一个应急使用的 root 用户,但是抛去这点来说其他的用 RBAC 问题都不大。
确实是大部分的操作都是可以对应到一个接口的。主要是涉及到权限系统本身的管理就比较复杂。比如角色的添加、用户删除这些的权限处理可能就需要写在业务逻辑里了。
你好,我是 Casbin 作者。
1. 用 ACL with superuser 模型即可: https://casbin.org/docs/en/supported-models
2. 这种一般是用 ABAC 来解决:判断主体(用户)与客体(密码)的 owner 是不是一致: https://github.com/casbin/casbin/blob/master/examples/abac_model.conf 不过这样密码就是一个实体了,其实比较怪异,可以直接添加一个 set-password API 来设置自己密码,管理员针对其他用户( User )的所有字段具有修改权限。具体怎么设计可以有无数种方式,不同的设计会导致 Casbin 使用上的不同,需要具体问题具体分析。
嗯嗯谢谢~。前阵子一直在看 casbin 的文档。感觉自己对权限这块的基础知识还需要加深学习哈哈,在设计和实现上有点踌躇不前。
model.conf 直接增加超管的账号就可以啦:<br>[request_definition]<br>r = sub, obj, act<br><br>[policy_definition]<br>p = sub, obj, act<br><br>[role_definition]<br>g = _, _<br><br>[policy_effect]<br>e = some(where (p.eft == allow))<br><br>[matchers]<br>m = g(r.sub, p.sub) && keyMatch2(r.obj, p.obj) && regexMatch(r.act, p.act) || r.sub == 1<br>
在Golang中,RBAC(Role-Based Access Control,基于角色的访问控制)模型是一种有效的权限管理方法。以下是RBAC模型定义权限及处理的时机:
定义权限
RBAC模型通过角色将用户与权限关联起来。在RBAC中,权限通常被定义为用户可以对系统资源执行的操作,如读取、写入、删除等。这些权限被分配给角色,而用户则被赋予角色,从而间接获得权限。
处理时机
RBAC模型在处理权限时主要涉及两个时机:
- 用户访问资源前:系统需要验证用户是否具有访问该资源的权限。这通常通过检查用户所属的角色及其对应的权限来实现。如果用户具有所需权限,则允许访问;否则,拒绝访问。
- 权限变更时:当用户的角色或角色的权限发生变化时,系统需要更新RBAC模型中的相关信息,以确保权限管理的准确性和有效性。这包括添加新用户、删除用户、为用户分配或撤销角色、为角色分配或撤销权限等操作。
综上所述,RBAC模型在Golang中通过角色将用户与权限关联起来,并在用户访问资源和权限变更时进行相应的处理,以实现有效的权限管理。