当前位置:   article > 正文

基于Django的RBAC组件(角色的访问控制)进阶篇(二)_django2.2 rbac

django2.2 rbac

之前这个基础版有其局限性,当我们进行更细粒度的权限控制时会显得比较乏力。所以在这进阶篇中,我们进行了改进。对数据库表以及表字段进行了增加完善。所以看不懂的话,可以先看看基础版

现在开始正题:

首先我们先对 app01/views.py中的这两个函数进行修改

def user(request):
    user_obj = User.objects.all()
    return render(request, 'user.html', {'user_obj': user_obj})

def role(request):
    user_obj = User.objects.all()
    role_obj = user_obj.values('name', 'roles__title')
    print(role_obj)
    return render(request, 'role.html', {'role_obj': role_obj})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

然后我们也对静态html模板进行了优化使用了模板继承:
base.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"
          integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

    <!-- 可选的 Bootstrap 主题文件(一般不用引入) -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap-theme.min.css"
          integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">

    <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"
            integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
            crossorigin="anonymous"></script>
    <style>
        .header{
            height: 60px;
            width: 100%;
            background-color: deepskyblue;
        }
        .menu{
            width: 200px;
            top: 60px;
            bottom: 0px;
            background-color: khaki;
            position: fixed;
            float: left;
        }
        .content{
            position: fixed;
            left: 220px;
            right: 0px;
            top: 60px;
            bottom: 0px;
            overflow: auto;
        }
    </style>
    <title>user</title>
</head>
<body>

    <div class="header">

    </div>
    <div class="con">
        <div class="menu">
            menu
        </div>
        <div class="content">
            {% block content %}
            {% endblock %}
        </div>
    </div>
</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57

user.html:

{% extends 'base.html' %}
{% block content %}
    <table class="table table-bordered table-hover">
        <thead>
        <tr>
            <th>序号</th>
            <th>名字</th>
            <th>操作</th>
        </tr>
        </thead>
        <tbody>
        {% for user in user_obj %}
            <tr>
                <td>{{ forloop.counter }}</td>
                <td>{{ user.name }}</td>
                <td>
                    <a class="btn btn-info" href="">编辑</a>
                    <a class="btn btn-danger" href="">删除</a>
                </td>

            </tr>
        {% endfor %}
        </tbody>
    </table>
{% endblock %}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

role.html:

{% extends 'base.html' %}
{% block content %}
    <table class="table table-bordered table-hover">
    <thead>
        <tr>
            <th>序号</th>
            <th>名字</th>
            <th>角色</th>
            <th>操作</th>
        </tr>
    </thead>
    <tbody>
        {% for role in role_obj %}
            <tr>
                <td>{{ forloop.counter }}</td>
                <td>{{ role.name }}</td>
                <td>{{ role.roles__title }}</td>
                <td>
                    <a class="btn btn-info" href="">编辑</a>
                    <a class="btn btn-danger" href="">删除</a>
                </td>

            </tr>
        {% endfor %}
    </tbody>
</table>
{% endblock %}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

然后我们就要进行逻辑代码编写了。

**首先:**我们需要在我们模型表中添加多一个权限组表,然后在权限表中添加字段:

class Permission(models.Model):
    title = models.CharField(max_length=32)
    url = models.CharField(max_length=128)
    action = models.CharField(max_length=16, default='')  # 设置一下默认值,免得报错
    group = models.ForeignKey(to='PermissionGroup', default='1')  # 设置一下默认值,免得报错

    def __str__(self):
        return self.title


class PermissionGroup(models.Model):
    title = models.CharField(max_length=32,)  # 设置一下默认值,免得报错

    def __str__(self): return self.title
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

添加完成后进行makemigrations和migrate。
先把新增的表添加到admin中,后登录admin管理系统进行一些操作:

在权限组中添加两个:
在这里插入图片描述
然后在permission中进行改动
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
用户相关的亦是如此:
在这里插入图片描述
这里不再一一列举了。
然后: 表进行完善后就需要进行代码重构了:
首先我们需要在login中的initial_permission(request, user_obj)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/71775
推荐阅读
相关标签