码迷,mamicode.com
首页 > 其他好文 > 详细

Django-权限管理

时间:2017-09-22 17:46:14      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:pen   个人   apt   微软   中间   led   dmi   normal   port   

一、权限
RBAC:role basic access control

1、什么是权限:
一个权限就是一个url,不同个权限对应不同的url,拥有权限即可以访问这个url。
技术分享
2、权限划分:
如果以每个人来划分权限,分配的时候回非常麻烦,特别是权限和人都非常多的时候
以角色来划分权限
技术分享

二、做一个简单权限管理系统

创建数据模型
技术分享
技术分享

############# 重点:我们做一个用于权限管理的app,可移植到其他项目 ###############

添加app,rbac是除了app01另外创建的应用,专用于权限管理,后面可以移植到其他项目
#########################################################
                    # rbac 权限相关配置 #
#########################################################

# 保存用户权限的session key
SESSION_PERMISSION_URL_KEY = "sanhdfiuhasakdjflkajsf"
SESSION_PERMISSION_MENU_URL_KEY = "sjdiuwekljdsksdfjlskdsd"
ALL_MENU_KEY = "k1"
PERMISSION_URL_KEY = "k2"
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, }

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
技术分享
##################### 这里给rbac写一个配套的初始化权限的服务 ###################
写一个专门用于获取用户权限的初始化服务
#########################################################
                    # rbac 权限相关配置 #
#########################################################

# 保存用户权限的session key
SESSION_PERMISSION_URL_KEY = "sanhdfiuhasakdjflkajsf"
SESSION_PERMISSION_MENU_URL_KEY = "sjdiuwekljdsksdfjlskdsd"
ALL_MENU_KEY = "k1"
PERMISSION_URL_KEY = "k2"
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-权限管理

标签:pen   个人   apt   微软   中间   led   dmi   normal   port   

原文地址:http://www.cnblogs.com/lucaq/p/7575585.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!