Go 语言项目开发实战
孔令飞
腾讯云专家工程师,前 Red Hat、联想云工程师
41030 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 61 讲
Go 语言项目开发实战
15
15
1.0x
00:00/00:00
登录|注册

27 | 权限模型:5大权限模型是如何进行资源授权的?

RBAC3
RBAC2
RBAC1
RBAC0
最强大的权限模型:ABAC
最普及的权限模型:RBAC
基于 ACL 且安全性更高的权限模型:MAC
基于 ACL 下放权限的权限模型:DAC
简单的权限模型:ACL
gin-vue-admin
gin-admin
go-admin
keto
Casbin
权限模型介绍
权限相关术语介绍
课后练习
总结
相关开源项目
权限模型介绍
权限模型知识关系脑图

该思维导图由 AI 生成,仅供参考

你好,我是孔令飞。在开始讲解如何开发服务之前,我先来介绍一个比较重要的背景知识:权限模型。
在你的研发生涯中,应该会遇到这样一种恐怖的操作:张三因为误操作删除了李四的资源。你在刷新闻时,也可能会刷到这么一个爆款新闻:某某程序员删库跑路。操作之所以恐怖,新闻之所以爆款,是因为这些行为往往会带来很大的损失。
那么如何避免这些风险呢?答案就是对资源做好权限管控,这也是项目开发中绕不开的话题。腾讯云会强制要求所有的云产品都对接 访问管理(CAM) 服务(阿里云也有这种要求),之所以这么做,是因为保证资源的安全是一件非常非常重要的事情。
可以说,保证应用的资源安全,已经成为一个应用的必备能力。作为开发人员,你也一定要知道如何保障应用的资源安全。那么如何才能保障资源的安全呢?我认为你至少需要掌握下面这两点:
权限模型:你需要了解业界成熟的权限模型,以及这些模型的适用场景。只有具备足够宽广的知识面和视野,我们才能避免闭门造车,设计出优秀的资源授权方案。
编码实现:选择或设计出了优秀的资源授权方案后,你就要编写代码实现该方案。这门课的 IAM 应用,就是一个资源授权方案的落地项目。你可以通过对 IAM 应用的学习,来掌握如何实现一个资源授权系统。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了5种常见的权限模型,包括ACL、DAC、MAC、RBAC和ABAC。ACL是一种简单的权限模型,用于判断用户是否可以对资源进行特定操作;DAC是ACL的扩展模型,具有更强的灵活性,允许Subject将权限下放给其他Subject;MAC是ACL的扩展模型,安全性更高,要求Subject和Object同时具有安全属性才能授权通过;RBAC是一种基于角色的访问控制模型,而ABAC是基于属性的权限验证模型,被认为是权限系统设计的未来。文章详细介绍了这些模型的特点和适用场景,帮助读者了解不同权限模型的基本概念和适用场景。此外,还介绍了相关开源项目,如Casbin、keto、go-admin等,为读者提供了学习和实践的资源。ABAC模型的细粒度控制和灵活性,以及开源项目的介绍,使得读者能够快速了解权限模型的基本概念和实际应用,为设计资源授权系统提供了指导。文章还提出了选择建议,建议读者学习相关开源项目以及思考如何将授权流程集成进统一接入层。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 语言项目开发实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(12)

  • 最新
  • 精选
  • Geek_175bc2
    老师想问一下,我们的业务是针对一个接口,不同的角色要获取不同的查询结果,例如:管理员可以看到所有列表数据,区域主管能看到对应区域的数据等,项目中全是类似的业务场景,需要用怎么的权限模型设计呢

    作者回复: 加我微信聊nightskong。一言两语说不清

    2021-12-01
    3
    3
  • wei 丶
    1. ABAC 2. 在网关通过RPC或者restful api调用授权系统进行鉴权

    作者回复: 666666

    2021-09-30
    3
  • helloworld
    思考题1:ABAC;2:写一个网关插件,当访问认证通过后,自动调用类似本iam项目的后端应用作资源鉴权。

    作者回复: 老哥回答给100分

    2021-07-27
    2
    3
  • AKA三皮
    我强烈不同意在网关处实现权限的管理:理由,通常网关是无状态的。要实现一套完整的权限管理,对于网关来说太重了;同时,很多开源的网关会把授权的动作委托给第三方,如权限平台,但是这种,在实际生产中,如果每次请求都要多一跳的话, 网关的效率如何去保证?目前有一些方案,建议是采用sidecar的方式(如OPA),但是关于大量权限数据的存储与同步方案,却很少

    作者回复: 优秀的开源网关都提供授权的WebHook,授权是通过webhook调用第三方服务完成的。 这里并不是说授权服务要集成在网关系统中。而是说,要在网关这一层通过webhook的方式进行认证。 性能问题很好办:需要的开启,不需要的关闭。如果一个应用放需要授权,放哪里都要多一次授权调用,所以多一次调用这个不是问题。

    2022-07-27归属地:广东
    2
  • 臭臭
    老师, 请问下,比如想要实现一个文章编辑"EDIT"权限, 并且只能编辑自己发布的文章,结合 Casbin 的 RBAC模型,实现的思路是什么样的呢? 我的想法是做一个 "EDIT_SELF_ARTICLE"权限, 拥有这个权限的人员就可以修改自己的文章, 但这样实现 就相当于 判断人员拥有编辑权限之后, 还需要自己写业务逻辑判断当前要修改的文章是否是自己发布的文章 ?

    作者回复: 判断人员是否可以修改自己的文章,这个属于资源守护全系统干的事情,为啥还需要自己写业务逻辑判断当前修改的文章是否自己发布的文章呢? 另外,如果要允许别人修改自己的文章,底层就不应该加这层判断。

    2021-07-30
    2
    2
  • 李凯
    拜读了大佬的iam源码,根据大佬的建议调研了go-admin 结合这两个项目,有些设计上的问题想请教下。 1. go-admin的admin模块,以及代码生成出来的目录结构,并没有面向接口编程。而是把service层和存储层放在了一起实现,面向对象编程。service层业务逻辑多了后会很乱,每个方法很臃肿。iam中先分层,结构清晰,在每一层定义对象,然后面向接口编程,这个更容易理解。不知道大佬对个怎么看。 2. 如果想用go-admin的权限管理,和代码生成工具,但是不想用他的分层和面向对象的编程方式,我该怎么办。 3.目前着手从iam和go-admin中抽取一些功能和设计思想,形成新的项目。比如项目结构采用iam的设计方式,server部分用iam的优雅终止和实例的初始化,以及配置,code码,业务面向接口的那一套等等,但是,不久以后我要在这个项目中加入权限管理,go-admin确实不错很符合需求,我该如何是好,是整合go-admin还是直接代码拿过来。 希望大佬给点建议,谢谢🙏

    作者回复: 1. iam设计的更为合理,尤其在项目很大的时候,每层实现的功能清晰,通过接口解耦合,也能让代码变得可测试; 2. 这个问题不太好回复,你可以将go-admin的业务代码迁移到iam中,虽然工作量大,但是也花不了多少精力 3. 我觉得看个人需求吧,如果追求代码质量,那可能要结合2个项目的优点组成一个新的项目;如果只是工作,并且更注重需求和效率,可以直接用go-admin

    2022-11-07归属地:广东
    1
  • Geek_d8f539
    我看authzserver的访问控制是用的 ory/ladon,好像文中没提到

    作者回复: 后面文章会提到

    2022-05-16归属地:广东
  • 我是小妖怪🇨🇳
    为啥没有Red Hat的keycloak?

    作者回复: 这里列的是一些常见的权限模型

    2022-04-24
  • Geek_b9d307
    想了解一下访问控制框架 casbin 和 open policy agent,这两款产品有什么优缺点?两者分别适用场景是什么?

    作者回复: 你可以调研下,open policy agent不熟悉

    2022-01-09
  • yandongxiao
    总结: 1. 五种权限模型:ACL、DAC、MAC、RBAC、ABAC。 2. 前三个是面向资源的权限管理系统;RBAC是面向角色的权限管理系统;ABAC是面向属性的权限管理系统。对于一般的项目来说,使用RBAC即可。 3. 开源的授权项目有,casbin, keto, go-admin, gin-admin。其中 go-admin 和 gin-admin 都是RBAC权限管理脚手架
    2021-11-27
    1
收起评论
显示
设置
留言
12
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部