Django-权限管理
Posted LCQ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django-权限管理相关的知识,希望对你有一定的参考价值。
一、权限
RBAC:role basic access control
1、什么是权限:
一个权限就是一个url,不同个权限对应不同的url,拥有权限即可以访问这个url。
2、权限划分:
如果以每个人来划分权限,分配的时候回非常麻烦,特别是权限和人都非常多的时候
以角色来划分权限
二、做一个简单权限管理系统
创建数据模型
############# 重点:我们做一个用于权限管理的app,可移植到其他项目 ###############
添加app,rbac是除了app01另外创建的应用,专用于权限管理,后面可以移植到其他项目
python manage.py startapp rbac
然后在settings的INSTALLED_APPS配置中加入‘rbac\'
将表注册到admin,当然是’rbac\'的admin中
创建管理员python manage.py createsuperuser
admin后台添加菜单,以及其他数据
127.0.0.1:8000/admin
urls
views(app01/views,调用rbac应用来实现权限功能)
##################### 这里给rbac写一个配套的初始化权限的服务 ###################
写一个专门用于获取用户权限的初始化服务
from django.conf import settings from .. import models def init_permission(request,user_obj): """ 初始化用户权限 :param request: :param user_obj: :return: """ # distinct()去掉重复,values可以取roles对应的多对多的表的字段 permission_item_list = user_obj.roles.values(\'permissions__title\',\'permissions__url\', \'permissions__menu_id\').distinct() # 保存当前用户有权访问的URL permission_url_list = [] # 保存当前用户有权访问的URL且需要在菜单上显示 permission_menu_list = [] for item in permission_item_list: """ 循环这个query_set集合,取需要的数据 """ permission_url_list.append(item[\'permissions__url\']) if item[\'permissions__menu_id\']: temp = {\'title\':item[\'permissions__title\'],\'url\':item[\'permissions__url\'], \'menu_id\':item[\'permissions__menu_id\']} permission_menu_list.append(temp) # 所有菜单 menu_lsit = list(models.Menu.objects.values(\'caption\',\'parent_id\')) request.session[settings.SESSION_PERMISSION_URL_KEY] = permission_url_list request.session[settings.SESSION_PERMISSION_MENU_URL_KEY] = { settings.PERMISSION_URL_KEY:permission_menu_list, settings.ALL_MENU_KEY: menu_lsit, }
################ 为了写入session方便,我们在settings配置session键 ########################
######################################################### # rbac 权限相关配置 # ######################################################### # 保存用户权限的session key SESSION_PERMISSION_URL_KEY = "sanhdfiuhasakdjflkajsf" SESSION_PERMISSION_MENU_URL_KEY = "sjdiuwekljdsksdfjlskdsd" ALL_MENU_KEY = "k1" PERMISSION_URL_KEY = "k2"
中间件应用
对请求进行判断,无权限直接退出,登录页面除外
作业以上
以上是关于Django-权限管理的主要内容,如果未能解决你的问题,请参考以下文章