首页 > 其他分享 >关于权限系统的一些思考

关于权限系统的一些思考

时间:2024-10-26 08:58:40浏览次数:5  
标签:判断 系统 缓存 关于 思考 Owner 权限 分配

开始

权限系统无非是解决两个问题,Authentication(认证-你是谁)和 Authorization(授权-你能干什么)。

Authentication

认证的问题,很好理解,就是根据用户的身份凭据,计算出这个用户的身份信息。

而身份凭据,常见有 Token 和 Session,还有 Permanent Token(永久令牌)、Application password(应用专用密码)等。

这里可以延伸聊一下登录问题,其实登录不应该算作 Authentication 范畴,登录只是一个 Action,用于换取身份凭据的动作。没有登录这个工作,换种方式颁发身份凭据,难道权限系统就不能工作了吗?

Authorization

Authorization 又可以划分为三个问题来解决:

  • 分配:赋予谁什么权限;
  • 解决/计算:计算谁有什么权限;
  • 判断:判断谁是否有某个权限;

分配

分配要考虑的问题有两个,一个是谁、一个是目标。因此分配要解决的问题就是:要给谁在什么目标上分配什么权限。

给谁?比如用户、用户组等,我们称为 Owner

什么目标?权限分配一定要有一个附着点,比如项目、公司、组织等,我们称为 AuthTarget

什么权限?为了分配上的方便,我们常常把一堆权限集称为 角色,角色的作用仅仅是为了分配上的简洁,一般不用来做判断,什么原因,下文会解释。

我们一般推荐权限系统是模块独立于业务系统的,很简单,权限系统本来就是业务不相关的。我们只要将权限系统的 AuthTarget 和业务系统的资源做关联,就能驱动业务系统完成权限工作,而这个关联行为是权限系统关联业务系统,还是业务系统关联权限系统,或是单独关联,仁者见仁,智者见智。

解决

计算一个 Owner 有什么权限,并缓存起来。

这点主要是为了性能的考虑,如果在判断的时候再去计算 Owner 的权限,必将大大拖累业务系统的性能,而且一个 Owner 的权限大部分时间内都是不变的,因此缓存命中率特别高,特别适合缓存。

缓存的 Key 的是 Owner,Value 包括 权限 + AuthTarget。

判断

判断一个 Owner 是否有权限访问资源。

判断分为前端和后端,而判断的前提就是依赖 解决 中缓存的用户权限。

为什么不用 角色 来判断 Owner 是否能访问资源呢?如果诸多资源都用一个角色 判断,不方便扩展和拆分,更严重的是,随着时间推移,常常出现自己都预想不到的越权行为,因为到处都是基于某个角色的判断。那么我多定义一些角色呢?额。这不就变成了权限判断?

直接使用权限进行判断,可以为用户提供更精细的权限控制。安全系统设计的一个重要原则是“最小权限原则”(Principle of Least Privilege),即应尽可能只授予用户完成任务所需的最低权限。通过直接基于权限判断,可以更加严格地控制用户权限的分配,减少误授权的可能性。

标签:判断,系统,缓存,关于,思考,Owner,权限,分配
From: https://www.cnblogs.com/jmcui/p/18488261

相关文章

  • 关于node中cookie的相关研究
    在请求头中加入set-cookie字段,客户端收到这个Set-Cookie的ֽ应后,在之后的请求时会在Cookie中上这个值。一般格式可以参考如下Set-Cookie:token=dywuh1g87;Expires=Wed,11Aug202407:28:00GMT;Secure;HttpOnly了解一下cookie解释一下常用的几个属性Expires这......
  • 关于期望dp的一些个人理解
    本人概率期望菜的一批,写一下博客来加深印象期望的基本定义首先期望本身是一个加权平均值,表示把每种情况按照概率发生后总和除以总的发生次数,这是定义法,然后合并一下就是:\[E=\sum_ip_i\timesval_i\]其中\(p_i\)表示事件\(i\)发生的概率,满足\(\sump_i=1\)关于期望......
  • Linux 权限的理解
    内容摘要本文内容包括shell的运行原理,包括外壳程序的原理、理解、和意义,以及从两个方面对于权限的理解(人和事物的属性)、修改文件的权限,包括修改文件的拥有者、修改文件拥有者所在的组的用户以及修改文件的三类用户的访问文件的权限、最终权限与起始权限和umask的关系、以及粘......
  • 关于组合数学
    排列组合的一些公式及推导(非常详细易懂)错排公式\[D_1=0,D_2=1,D_n=(n-1)(D_{n-2}+D_{n-1})\]特殊性质:\[C^0_n=1\]\[C^m_n=C^{n-m}_n\]\[C^m_n=C^{m-1}_{n-1}+C^{m}_{n-1}\]其中第三个还和杨辉三角有关。另外,还有一些公式:从\(n\)个不同的元素取\(m\)个元素(可以......
  • WEBRTC教程:局域网怎么调试,http://172.19.18.101:8080 ,无法访问摄像头和麦克风,请检查
    在局域网中使用WebRTC时,无法访问摄像头和麦克风通常是因为浏览器的安全策略限制了getUserMediaAPI的使用。如果你在非localhost或非HTTPS环境下访问网页,浏览器会阻止访问摄像头和麦克风。解决方案在局域网中调试WebRTC时,你有几个选项来解决这个问题:1.使用lo......
  • 【AI战略思考10】太阁立志传
    【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】这是我今天发在朋友圈的,在博客也发一遍。为什么叫太阁立志传《太阁立志传》是一款以日本战国时代为背景的游戏,主线剧情是丰臣秀吉如何从一介平民力争上游,最终成为统一日本的名将,官拜关白(关白退位后改称太阁)。......
  • 关于手动关闭多个el-popover的方法且不使用visible属性
    1.在el-popover使用ref<el-popoverref="motifyPopover":width="260"trigger="click"popper-class="modify-popover"/>2.声明motifyPopoverconstmotifyPopover=ref<InstanceType<typeofElPopover>>()......
  • 关于ubuntu系统升级遇到的问题:upgrades to the development release are only.......
    主要问题在于使用的是命令:sudodo-release-upgrade-d这将会寻找最新的版本进行安装,但是如果最新版本不稳定的话请求会受到拒绝,导致更新无法进行。具体区别如下:do-release-upgrade是Ubuntu系统用于升级到新版本的命令。当你运行这个命令时,系统会检查是否有新版本可用,并且会自......
  • git怎么修改文件权限
    ​​git中修改文件权限的核心步骤为:1.了解文件权限概念与基本指令;2.使用chmod进行权限调整;3.使用git更新文件权限;4.解决文件权限的常见问题;5.确保团队成员同步权限设置。首先,你需要了解文件权限的基本概念。1.了解文件权限概念与基本指令在Unix和Linux系统中,文件权限是一个基......
  • 关于决策树的理解
    近期在项目中使用了规则树这一设计模式,感觉和决策链来说是有些区别的1.决策链是链型的,走的是链,流程都要完整的走一遍2.决策链用的一种嵌套,基于函数结尾重新调用next的函数直至结束但是规则树不一样规则树是基于类似二叉树的结构,有的通过有的不通过,并且它每层都用List<M......