RBAC权限管理设计

设计一个灵活、通用、方便的权限管理系统。
在这个系统中,我们需要对系统的所有资源进行权限控制,那么系统中的资源包括哪些呢?我们可以把这些资源简单概括为静态资源(功能操作、数据列)和动态资源(数据),也分别称为对象资源和数据资源,后者是我们在系统设计与实现中的叫法。

系统的目标就是对应用系统的所有对象资源和数据资源进行权限控制,比如应用系统的功能菜单、各个界面的按钮、数据显示的列以及各种行级数据进行权限的操控。

1,RBAC权限分配

RABC:基于角色的权限访问控制(Role-Based Access Control)

一般在登录系统认证通过后,会先确定的该用户的操作权限,判断用户的后续操作是否合法!
RABC至少需要三张表:用户表–角色表–权限表(多对多的关系比较合理)
用户表:用来存储用户名和密码,进行登录校验,可以重写User表,使用django内置的auth认证系统,也可自定义;
角色表:对用户角色进行分配,
权限表:存储所有需要进行权限分配的url请求路径

  • 所有权限的本质是对数据库中表中数据增删改查的操作
  • 而这些增删改查的操作是通过前端不同路由,通过get、post、put、delete方法操作数据库的
  • 对权限的控制,最简单的方法就是判断当前用户是否可以对指定路由请求操作的权限
  • 把角色和这个角色能够访问的 url 和 请求方式进行关联(因为正是的业务逻辑用户权限划分力度可能非常细致)
  • 再简单的业务逻辑中这一张表就是权限表
路由 资源(可能对应的是后端路由的 name名称,可以通过name名称解析出对应路由)请求方式说明
https://www.shiyanlou.com/v1/books/get判断用户是否可以查询books表中数据
https://www.shiyanlou.com/v1/books/post判断用户是否可以添加books表中数据
https://www.shiyanlou.com/v1/books/put判断用户是否可以更新books表中数据
https://www.shiyanlou.com/v1/books/delete判断用户是否可以删除books表中数据

RBAC权限分配操作过程:
用户登录,通过用户表校验用户名和密码
登录成功,记录用户登录状态,同时查询(通过用户关联的权限表)记录当前用户的权限(可以记录在django的session表)
访问认证,对每个url的请求事先进行登录状态和权限的验证(可以放在中间件的process_request中,注意设置相应的放行白名单)

后端如何判断用户权限

  • 用户发送求方法 https://www.shiyanlou.com/v1/books/ 的url
  • 后端首先查询时哪一个用户,然后查询当前用户的角色
  • 最后判断这个角色是否可以访问 https://www.shiyanlou.com/v1/books/ 的对应方法即可
  • 如果这个角色有权限访问这个url就返回数据,不能访问就返回 401状态码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hsw Come on

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值