4 CRM-权限管理rbac

Posted venicid

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4 CRM-权限管理rbac相关的知识,希望对你有一定的参考价值。

1、引入权限组件rbac

技术分享图片

1、settings配置app、中间件

INSTALLED_APPS = [
    ... ...
    crm.apps.CrmConfig,
    "stark.apps.StarkConfig",
    rbac.apps.RbacConfig,
]

中间件

MIDDLEWARE = [
    。。。。
    rbac.service.rbac.ValidPermission,
]

2、员工表UserInfo和rbac.User表关联 一对一

  UserInfo中的用户名和密码也可删了,只留rbac.User中的用户名和密码。

 添加新的字段

    user= models.OneToOneField(to=User,null=True,on_delete=True)

技术分享图片

makemigrations  migrate

技术分享图片

3、在rbac组件中添加starkadmin

rbac/stark.py

from stark.service.stark import site,ModelStark

from .models import *

class UserConfig(ModelStark):
    list_display = [name,roles]

site.register(User,UserConfig)
site.register(Role)

class PermissionConfig(ModelStark):


    list_display = [id,title,url,group,action]

site.register(Permission,PermissionConfig)
site.register(PermissionGroup)

 

技术分享图片

2、分配权限

1、分配权限组

技术分享图片技术分享图片

2、分配权限

 技术分享图片技术分享图片

3、分配角色

技术分享图片技术分享图片

4、分配用户

 技术分享图片

5、rbac用户与crm的用户一一对应

 技术分享图片技术分享图片

 6、登录查看权限

 技术分享图片技术分享图片

url

from django.conf.urls import url
from django.contrib import admin

from crm import views

from stark.service.stark import site
urlpatterns = [
    url(r^admin/, admin.site.urls),
    url(r^stark/, site.urls),
    url(r^login/, views.login),
]

 

 

 crm/view  login的视图

from django.shortcuts import render,HttpResponse

# Create your views here.
from rbac.models import User
from rbac.service.perssions import initial_session

def login(request):
    if request.method ==POST:
        user = request.POST.get(user)
        pwd = request.POST.get(pwd)

        user = User.objects.filter(name=user,pwd=pwd).first()
        if user:
            request.session[user_id]=user.pk
            # 注册权限到session中
            initial_session(request,user)

            return HttpResponse(登录成功)



    return render(request,login.html,locals())

 

 login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form action="" method="post">
    {% csrf_token %}
    用户名: <input type="text" name="user">
    密码: <input type="password" name="pwd">
    <input type="submit">
</form>
</body>
</html>

3、登录、引入中间件

1、引入中间件

MIDDLEWARE = [
    。。。
    rbac.service.rbac.ValidPermission,
]

 

2、不同的用户具有不同的权限

技术分享图片技术分享图片

3、修改rbac显示premission的title

技术分享图片

    # 注册菜单权限
    # permissions = user.roles.all().values("permissions__url", "permissions__action", "permissions__group__title").distinct()
    permissions = user.roles.all().values("permissions__url", "permissions__action", "permissions__title").distinct()


            # menu_permission_list.append((item["permissions__url"], item["permissions__group__title"]))  # 组的名称
            menu_permission_list.append((item["permissions__url"], item["permissions__title"]))
           # 用自己permission的title

 

 4、模板继承:与rbac的base.html相同

 技术分享图片技术分享图片

 例如:chang_view.html

{% extends ‘base.html‘ %}

{% block content %}

    <h3>编辑页面</h3>

    {% include ‘form.html‘ %}

{% endblock %}

 

 

 例如base.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css">
    <script src="/static/js/jquery-1.12.4.min.js"></script>
    <script src="/static/charts/highcharts.js"></script>
    <link rel="stylesheet" href="/static/css/add.css">
    <link rel="stylesheet" href="/static/css/list.css">
    <link rel="stylesheet" href="/static/css/base.css">

</head>
<body>


<div class="header">
    <span style="background-color: azure">{{ user.name }}</span>

</div>

<div class="container">

    {% load my_tags %}
    <div class="menu left">
        {% get_menu request %}
    </div>


    <div class="content right">
        {% block content %}


        {% endblock %}
    </div>

</div>

</body>
</html>

4、github代码

技术分享图片

github代码  https://github.com/venicid/CRM_low

以上是关于4 CRM-权限管理rbac的主要内容,如果未能解决你的问题,请参考以下文章

产品经理必须掌握的权限模型

CRM——权限

django基于角色的权限控制

人员权限管理(RBAC)实现,附加源码

PHP RBAC权限控制实现思路

详解权限管理(RBAC)的实现方法