分配权限

def distribute_permissions(request):
    uid = request.GET.get('uid')
    user = User.objects.filter(id=uid)
    user_list = User.objects.all()
    roles = Role.objects.all()
    rid = request.GET.get('rid')
    if request.method == "POST" and request.POST.get("postType") == "role":
        print(request.POST.getlist('role'))
        id_list = request.POST.getlist('role')
        user.first().roles.set(id_list)

    if request.method == "POST" and request.POST.get("postType") == "permission":
        id_list = request.POST.getlist('permission_id')
        Role.objects.get(pk=rid).permissions.set(id_list)

    if uid:
        role_id_list = User.objects.get(pk=uid).roles.all().values_list("pk")
        print('role_id_list',role_id_list)
        role_id_list = [item[0] for item in role_id_list]
        if rid:
            per_id_list = Role.objects.filter(pk=rid).values_list("permissions__pk")
        else:
            per_id_list = User.objects.get(pk=uid).roles.values_list("permissions__pk").distinct()
        per_id_list = [item[0] for item in per_id_list]
    return render(request, 'distribute_permissions.html', locals())

def permissions_tree(request):
    permissions = Permission.objects.values('pk','title','url','menu__title','menu__pk','pid')
    return JsonResponse(list(permissions),safe=False)
views.py
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link href="https://cdn.bootcss.com/twitter-bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet">
    <script src="/static/jquery-3.3.1.js"></script>
    <style>
        .active {
            background-color: yellow;
        }
    </style>
</head>
<body>
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-3" style="background-color: pink">
                用户信息
                <ul>
                    {% for user in user_list %}
                        <li><a href="?uid={{ user.pk }}">{{ user }}</a></li>
                    {% endfor %}

                </ul>
            </div>
            <div class="col-md-3">
                <form action="" method="post">
                    {% csrf_token %}
                    <button class="btn btn-success">保存</button>
                    <input type="hidden" name="postType" value="role">
                     <table class="table">
                    <thead>
                        <tr>
                            <th>角色</th>
                            <th>选择</th>
                        </tr>
                    </thead>
                    <tbody>
                    {% for role in roles %}
                        <tr {% if role.id|safe == rid %} class="active" {% endif %}>
                            <td><a href="?uid={{ uid }}&rid={{ role.id }}">{{ role }}</a></td>
                            {% if role.id in role_id_list %}
                                <td><input type="checkbox" name="role" value="{{ role.id }}" checked></td>
                            {% else %}
                                <td><input type="checkbox" name="role" value="{{ role.id }}"></td>
                            {% endif %}
                        </tr>
                    {% endfor %}
                    </tbody>
                </table>
                </form>
            </div>
            <div class="col-md-6">
                <form action="" method="post">
                    {% csrf_token %}
                    <input type="hidden" name="postType" value="permission">
                    {% if rid %}
                        <button class="btn btn-success">保存</button>
                    {% endif %}
                    <table class="table" id="body">
                    <tbody></tbody>
                </table>
                </form>
            </div>
        </div>
    </div>
</body>
<script>
    $.ajax({
        url:'/permissions_tree/',
        method:'get',
        success:function (res) {
            $.each(res,function (i,permission) {
                console.log(i,permission);
                var menu_title = permission['menu__title'];
                var menu_pk = permission['menu__pk'];
                var url = permission['url'];
                var pid = permission['pid'];
                var pk = permission['pk'];
                var title = permission['title'];
                if (menu_title){
                    if ($('#menu_'+menu_pk).length) {
                        var s = `
                        <tr id='per_${pk}'>
                            <td><input type='checkbox' name='permission_id' value='${pk}'>${title}</td>
                        </tr>
                        `;
                        $('#menu_'+menu_pk).parent().append(s)
                    }else {
                        var s = `<tr class='root' id='menu_${menu_pk}'><td>${menu_title}</td></tr>
                            <tr id='per_${pk}'>
                                <td><input type='checkbox' name='permission_id' value='${pk}'>${title}</td>
                            </tr>`;
                    $('#body').append(s);
                    }
                }else {
                    var s = `<td><input type='checkbox' name='permission_id' value='${pk}'>${title}</td>`;
                    $('#per_'+pid).append(s);
                }
            });
            var per_id_list ={{ per_id_list }};
            $.each(per_id_list,function (i,j) {
                $("#body [value='"+j+"']").prop('checked',true)
            })
        }
    })
</script>
</html>
distribute_permissions.html
原文地址:https://www.cnblogs.com/xuqidong/p/12649930.html