首页 > 其他分享 >4 权限分配

4 权限分配

时间:2022-08-29 17:55:48浏览次数:65  
标签:form request rbac html role user 权限 分配

给用户进行权限的分配。

1 角色管理

image

项目目录下urls新增一条url

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

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^rbac/', include('rbac.urls', namespace="rbac")),
    url(r'^', include('web.urls')),
]

rbac的app中新建urls.py文件

from django.conf.urls import url
from rbac.views import role

urlpatterns = [
    url(r"^role/list/$", role.role_list, name="role_list"),
    url(r"^role/add/$", role.role_add, name="role_add"),
    url(r"^role/edit/(?P<pk>\d+)/$", role.role_edit, name="role_edit"),
    url(r"^role/del/(?P<pk>\d+)/$", role.role_del, name="role_del"),
]

app_name = "rbac"

rbac的app中views/role.py文件

role.py
from django.shortcuts import render, redirect, HttpResponse
from django.urls import reverse
from django import forms
from rbac import models


class RoleModelForm(forms.ModelForm):
    class Meta:
        model = models.Role
        fields = ["title"]
        widgets = {
            "title": forms.TextInput(attrs={"class": "form-control"})
        }


def role_list(request):
    """角色列表"""
    role_queryset = models.Role.objects.all()
    return render(request, "rbac/role_list.html", {"roles": role_queryset})


def role_add(request):
    """添加角色"""
    if request.method == "GET":
        form = RoleModelForm()
        return render(request, "rbac/change.html", {"form": form})

    form = RoleModelForm(data=request.POST)
    if form.is_valid():
        form.save()
        return redirect(reverse("rbac:role_list"))

    return render(request, "rbac/change.html", {"form": form})


def role_edit(request, pk):
    """编辑角色"""
    obj = models.Role.objects.filter(id=pk).first()
    if not obj:
        return HttpResponse("角色不存在")
    if request.method == "GET":
        form = RoleModelForm(instance=obj)
        return render(request, "rbac/change.html", {"form": form})

    form = RoleModelForm(instance=obj, data=request.POST)
    if form.is_valid():
        form.save()
        return redirect(reverse("rbac:role_list"))

    return render(request, "rbac/change.html", {"form": form})


def role_del(request, pk):
    """删除角色"""
    origin_url = reverse("rbac:role_list")
    if request.method == "GET":
        return render(request, "rbac/delete.html", {"cancel_url": origin_url})

    models.Role.objects.filter(id=pk).delete()
    return redirect(origin_url)

rbac的app中templates/rbac/xxx.html文件

role_list.html
{% extends "layout.html" %}

{% block content %}
    <div class="luffy-container">
        <div class="btn-group" style="margin: 5px 0">

            <a class="btn btn-default" href="{% url "rbac:role_add" %}">
                <i class="fa fa-plus-square" aria-hidden="true"></i> 添加角色
            </a>

        </div>
        <table class="table table-bordered table-hover">
            <thead>
            <tr>
                <th>ID</th>
                <th>名称</th>
                <th>选项</th>
            </tr>
            </thead>
            <tbody>
            {% for row in roles %}
                <tr>
                    <td>{{ row.id }}</td>
                    <td>{{ row.title }}</td>
                    <td>
                        <a style="color: #333333;" href="{% url "rbac:role_edit" pk=row.id %}">
                            <i class="fa fa-edit" aria-hidden="true"></i></a>
                        <a style="color: #d9534f;" href="{% url "rbac:role_del" pk=row.id %}"><i
                                class="fa fa-trash-o"></i></a>
                    </td>
                </tr>
            {% endfor %}
            </tbody>
        </table>
    </div>
{% endblock %}

change.html
{% extends "layout.html" %}

{% block content %}
    <div class="luffy-container">

        <form class="form-horizontal" action="" method="post" novalidate>
            {% csrf_token %}
            {% for field in form %}
                <div class="form-group">
                    <label for="" class="col-sm-2 control-label">{{ field.label }}</label>
                    <div class="col-sm-8">
                        {{ field }}
                        <span style="color: red">{{ field.errors.0 }}</span>
                    </div>
                </div>
            {% endfor %}

            <div class="form-group">
                <div class="col-sm-offset-2 col-sm-8">
                    <input type="submit" value="保存" class="btn btn-primary">
                </div>
            </div>
        </form>

    </div>
{% endblock %}

delete.html
{% extends "layout.html" %}

{% block content %}
    <div class="luffy-container">
        <div class="alert alert-danger" role="alert">
            <form method="post">
                {% csrf_token %}
                <p style="font-size: 13px"><i class="fa fa-warning" aria-hidden="true"></i> 删除后不可恢复,是否确认删除!</p>
                <div style="margin-top: 20px">
                    <a href="{{ cancel_url }}" class="btn btn-default btn-sm">取消</a>
                    <button type="submit" class="btn btn-danger btn-sm">确认</button>
                </div>
            </form>
        </div>
    </div>
{% endblock %}

点击下载代码


2 用户管理

image

rbac的app中新建urls.py文件

from django.conf.urls import url
from rbac.views import role, user

urlpatterns = [
    ...
    url(r"^user/list/$", user.user_list, name="user_list"),
    url(r"^user/add/$", user.user_add, name="user_add"),
    url(r"^user/edit/(?P<pk>\d+)/$", user.user_edit, name="user_edit"),
    url(r"^user/del/(?P<pk>\d+)/$", user.user_del, name="user_del"),
]

app_name = "rbac"


rbac的app中myforms/user.py文件

user.py
from django import forms
from django.core.exceptions import ValidationError
from rbac import models


class UserModelForm(forms.ModelForm):
    re_password = forms.CharField(label="确认密码")

    class Meta:
        model = models.UserInfo
        fields = ["name", "email", "password", "re_password"]

    def __init__(self, *args, **kwargs):
        # 统一给form字段添加bootstrap样式
        super(UserModelForm, self).__init__(*args, **kwargs)
        for name, field in self.fields.items():
            field.widget.attrs["class"] = "form-control"

    def clean_re_password(self):
        password = self.cleaned_data["password"]
        re_password = self.cleaned_data["re_password"]

        if password != re_password:
            raise ValidationError("两次密码不一致")

        return re_password


class UpdateUserModelForm(forms.ModelForm):

    class Meta:
        model = models.UserInfo
        fields = ["name", "email"]

    def __init__(self, *args, **kwargs):
        super(UpdateUserModelForm, self).__init__(*args, **kwargs)
        for name, field in self.fields.items():
            field.widget.attrs["class"] = "form-control"


class ResetPasswordModelForm(forms.ModelForm):
    re_password = forms.CharField(label="确认密码")

    class Meta:
        model = models.UserInfo
        fields = ["password", "re_password"]

    def __init__(self, *args, **kwargs):
        super(ResetPasswordModelForm, self).__init__(*args, **kwargs)
        for name, field in self.fields.items():
            field.widget.attrs["class"] = "form-control"

    def clean_re_password(self):
        password = self.cleaned_data["password"]
        re_password = self.cleaned_data["re_password"]

        if password != re_password:
            raise ValidationError("两次密码不一致")

        return self.re_password

rbac的app中views/user.py文件

user.py
from django.shortcuts import render, redirect, HttpResponse
from django.urls import reverse

from rbac import models
from rbac.my_forms.user import UserModelForm, UpdateUserModelForm, ResetPasswordModelForm


def user_list(request):
    """用户列表"""
    user_queryset = models.UserInfo.objects.all()
    return render(request, "rbac/user_list.html", {"users": user_queryset})


def user_add(request):
    """添加用户"""
    if request.method == "GET":
        form = UserModelForm()
        return render(request, "rbac/change.html", {"form": form})

    form = UserModelForm(data=request.POST)
    if form.is_valid():
        form.save()
        return redirect(reverse("rbac:user_list"))

    return render(request, "rbac/change.html", {"form": form})


def user_edit(request, pk):
    """编辑用户"""
    obj = models.UserInfo.objects.filter(id=pk).first()
    if not obj:
        return HttpResponse("用户不存在")
    if request.method == "GET":
        form = UpdateUserModelForm(instance=obj)
        return render(request, "rbac/change.html", {"form": form})

    form = UpdateUserModelForm(instance=obj, data=request.POST)
    if form.is_valid():
        form.save()
        return redirect(reverse("rbac:user_list"))

    return render(request, "rbac/change.html", {"form": form})


def reset_pwd(request, pk):
    """重置密码"""
    obj = models.UserInfo.objects.filter(id=pk).first()
    if not obj:
        return HttpResponse("用户不存在")
    if request.method == "GET":
        form = ResetPasswordModelForm()
        return render(request, "rbac/change.html", {"form": form})

    form = ResetPasswordModelForm(instance=obj, data=request.POST)
    if form.is_valid():
        form.save()
        return redirect(reverse("rbac:user_list"))

    return render(request, "rbac/change.html", {"form": form})


def user_del(request, pk):
    """删除用户"""
    origin_url = reverse("rbac:user_list")
    if request.method == "GET":
        return render(request, "rbac/delete.html", {"cancel_url": origin_url})

    models.UserInfo.objects.filter(id=pk).delete()
    return redirect(origin_url)

rbac的app中templates/rbac/xxx.html文件

user_list.html
{% extends "layout.html" %}

{% block content %}
    <div class="luffy-container">
        <div class="btn-group" style="margin: 5px 0">

            <a class="btn btn-default" href="{% url "rbac:user_add" %}">
                <i class="fa fa-plus-square" aria-hidden="true"></i> 添加用户
            </a>

        </div>
        <table class="table table-bordered table-hover">
            <thead>
            <tr>
                <th>序号</th>
                <th>用户名</th>
                <th>邮箱</th>
                <th>重置密码</th>
                <th>操作</th>
            </tr>
            </thead>
            <tbody>
            {% for row in users %}
                <tr>
                    <td>{{ forloop.counter }}</td>
                    <td>{{ row.name }}</td>
                    <td>{{ row.email }}</td>
                    <td>
                        <a href="{% url "rbac:user_reset_pwd" pk=row.id %}">重置密码</a>
                    </td>
                    <td>
                        <a style="color: #333333;" href="{% url "rbac:user_edit" pk=row.id %}">
                            <i class="fa fa-edit" aria-hidden="true"></i></a>
                        <a style="color: #d9534f;" href="{% url "rbac:user_del" pk=row.id %}"><i
                                class="fa fa-trash-o"></i></a>
                    </td>
                </tr>
            {% endfor %}
            </tbody>
        </table>
    </div>
{% endblock %}

change.html
{% extends "layout.html" %}

{% block content %}
    <div class="luffy-container">

        <form class="form-horizontal" action="" method="post" novalidate>
            {% csrf_token %}
            {% for field in form %}
                <div class="form-group">
                    <label for="" class="col-sm-2 control-label">{{ field.label }}</label>
                    <div class="col-sm-8">
                        {{ field }}
                        <span style="color: red">{{ field.errors.0 }}</span>
                    </div>
                </div>
            {% endfor %}

            <div class="form-group">
                <div class="col-sm-offset-2 col-sm-8">
                    <input type="submit" value="保存" class="btn btn-primary">
                </div>
            </div>
        </form>

    </div>
{% endblock %}

delete.html
{% extends "layout.html" %}

{% block content %}
    <div class="luffy-container">
        <div class="alert alert-danger" role="alert">
            <form method="post">
                {% csrf_token %}
                <p style="font-size: 13px"><i class="fa fa-warning" aria-hidden="true"></i> 删除后不可恢复,是否确认删除!</p>
                <div style="margin-top: 20px">
                    <a href="{{ cancel_url }}" class="btn btn-default btn-sm">取消</a>
                    <button type="submit" class="btn btn-danger btn-sm">确认</button>
                </div>
            </form>
        </div>
    </div>
{% endblock %}

点击下载代码


标签:form,request,rbac,html,role,user,权限,分配
From: https://www.cnblogs.com/mimiICC/p/16635938.html

相关文章

  • 01 - 快速体验 Spring Security 5.7.2 | 权限管理基础
    在前面SpringBoot2.7.2的系列文章中,已经创建了几个computer相关的接口,这些接口直接通过SpringDoc或POSTMAN就可以访问。例如:GEThttp://localhost:9099/compute......
  • 删除文件夹提示需administrator权限
    解决办法:更改该文件夹所有者为当前登录用户,赋予该用户完全权限。一、改为当前登录用户          二、赋予该用户完全权限https://jingyan.baidu.c......
  • 3 权限粒度控制到按钮
    不同用户登录系统时候,根据权限不同来控制是否限制指定按钮第一步:修改表结构classPermission(models.Model):"""权限表"""title=models.CharField......
  • SSH命令权限不足
    ssh:errorwhileloadingsharedlibraries:libcrypto.so.1.1:cannotopensharedobjectfile:Nosuchfileordirectory-bash:/usr/bin/ssh:权限不够处理其它问......
  • 8/28 深入理解计算机系统笔记 动态内存分配
    9.9动态内存分配动态内存分配器维护一个进程的虚拟内存区域,称为堆。对于每个进程,内核维护一个变量brk,它指向堆的顶部。分配器将堆视做一组不同大小的块的集合来维护。......
  • 让你的PLC支持多连接,多电脑同时访问一个PLC 连接PLC的权限设置,PLC同时多连接
    要明白一个技术,首先要明白它到底是解决什么问题的?你是不是有以下的困扰1.我有个三菱的PLC,只能配置一个端口,但是有多台电脑需要从PLC进行读写,因为三菱是单链接的,所以直接读......
  • 通过自定义指令对button进行权限的校验
    通过自定义指令对button进行权限的校验场景:左侧菜单栏通过调接口获取,每一个菜单下的还有该菜单下的button的权限操作,在mentType为2时,该children就是button权限列表1.先获......
  • 启动HDFS伪分布式环境时报权限错误
    问题描述操作系统:Ubuntu18.04LTSHDFS版本:hadoop-3.2.3普通用户登录,参照官方文档在单机上安装伪分布式环境时,启动HDFS报权限错误。具体报错信息如下:$./sbin/start-df......
  • ORA-01659 无法分配超出5(或者其他数字)的MINEXTENTS
    ORA-01659无法分配超出5(或者其他数字)的MINEXTENTS-jingkunliu-博客园 https://www.cnblogs.com/Jingkunliu/archive/2012/02/22/2452128.html一、问题导入、新增S......
  • 关于工作任务的分配--关于自己的调整
    我就是如果一个事完成的不好,非要“惩罚”自己不可。这种做法是特别不可取的。比如之前答应WT当天提交方案文档,结果发现压根写不完,回家了想着应该打开电脑弄,但其实已经很......