Django如何实现RBAC权限管理
作者:xiaodong_blogs
这篇文章主要介绍了Django如何实现RBAC权限管理问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
Django RBAC权限管理
概述
RBAC(Role-Based Access Control,基于角色的访问控制),通过角色绑定权限,然后给用户划分角色。
比如说:
- 一个用户拥有若干个角色,这个角色呢又拥有若干个权限,CEO,具有公司全局的权限;
- 部门经理,具有部门全局的权限;
- 部门主管,具有部门部分的权限;
- 普通员工,具有部门一小部分权限。
不同的角色,能够获取的权限是不同的,角色的引入,让权限管理就会非常的灵活
流程图
models.py
资源表和角色表是多对多关系
from django.db import models # Create your models here. # 角色表 class Roles(models.Model): name = models.CharField(max_length=50) status = models.BooleanField(default=True) class Meta: db_table='roles' # 管理员表 class Admin_user(models.Model): username = models.CharField(max_length=50,verbose_name='用户名') password = models.CharField(max_length=200,verbose_name='密码') pic = models.CharField(max_length=200,default='',verbose_name='头像') status = models.BooleanField(default=True,verbose_name='状态') # 状态 supper = models.BooleanField(default=False,verbose_name='是否为超级管理员') # 是否为超级管理员 role = models.ForeignKey(Roles,on_delete=models.CASCADE) class Meta: db_table='admin_user' # 资源表 class Resource(models.Model): name = models.CharField(max_length=50) status = models.BooleanField(default=True) url = models.CharField(max_length=50,default='') level = models.IntegerField() pid = models.ForeignKey('self',on_delete=models.SET_NULL,null=True,blank=True,related_name='subs') roles = models.ManyToManyField(Roles,related_name='resources',null=True,blank=True) class Meta: db_table='resource'
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。