RBAC权限管理

前言

开发工时管理系统的时候,需要用到权限管理。具体需求大致如下:
1、超级管理员具有分发权限的功能以及查看所有用户的项目工时记录
2、各部门领导具有分发各部门下属员工的权限,以及查看所有下属员工项目工时记录的权限
3、员工各自可以查看各自的项目工时记录
由于采用了以上的权限管理,之前又没有做过权限的项目。于是直接用了flask-appbuilder框架,这个框架可以操作视图权限。能够快速完成我们所需要的功能。

RBAC

RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。

结构化单一模型

以 user(单一用户)、group(用户组)、permissions(单一权限)三层两两之间多对多的关系,实现了当用户请求接口 APIa,此时进行获取用户,获取用户所属组,获取所属组所具备的权限,若获取不到记录,则限制掉此次请求。运用这个模型,我们每次将 permissions 定义成:module、function 的形式,同时定义 request method 。这样将具有权限的 group 关联到一个 permission(即一个 handler)上。同时将用户关联到用户组,从而可以在不断变动权限的情况下,配置一次对应关系,将用户权限限制到单个 handler 上。

用 python 的同学知道,由于 python decorator @的语法糖,我们很喜欢用这种形式来处理这些与业务逻辑无关的代码,例如:日志记录、检查缓存、检查 user session等。有时候在一个方法装饰器写的像盖楼一样,稍不留神就忘记了。有时候开发者对项目不熟悉,在写一个新的接口之后,配置了权限,却忘记加装饰器,导致这部分一直没有被限制。

参考如何从零设计结构清晰、操作友好的权限管理模块

linux权限模型

Linux权限机制