设计一个灵活、通用、方便的权限管理系统。
在这个系统中,我们需要对系统的所有资源进行权限控制,那么系统中的资源包括哪些呢?我们可以把这些资源简单概括为静态资源(功能操作、数据列)和动态资源(数据),也分别称为对象资源和数据资源,后者是我们在系统设计与实现中的叫法。
系统的目标就是对应用系统的所有对象资源和数据资源进行权限控制,比如应用系统的功能菜单、各个界面的按钮、数据显示的列以及各种行级数据进行权限的操控。
1,RBAC权限分配RABC:基于角色的权限访问控制(Role-Based Access Control)
一般在登录系统认证通过后,会先确定的该用户的操作权限,判断用户的后续操作是否合法!
RABC至少需要三张表:用户表–角色表–权限表(多对多的关系比较合理)
用户表:用来存储用户名和密码,进行登录校验,可以重写User表,使用django内置的auth认证系统,也可自定义;
角色表:对用户角色进行分配,
权限表:存储所有需要进行权限分配的url请求路径
RBAC权限分配操作过程:
用户登录,通过用户表校验用户名和密码
登录成功,记录用户登录状态,同时查询(通过用户关联的权限表)记录当前用户的权限(可以记录在django的session表)
访问认证,对每个url的请求事先进行登录状态和权限的验证(可以放在中间件的process_request中,注意设置相应的放行白名单)
后端如何判断用户权限
用户发送求方法 https://www.shiyanlou.com/v1/books/ 的url后端首先查询时哪一个用户,然后查询当前用户的角色最后判断这个角色是否可以访问 https://www.shiyanlou.com/v1/books/ 的对应方法即可如果这个角色有权限访问这个url就返回数据,不能访问就返回 401状态码