首页 > 其他分享 >权限判断-按钮控制功能

权限判断-按钮控制功能

时间:2023-07-07 23:44:22浏览次数:27  
标签:判断 name permission request tag 按钮 权限

image

功能说明:

在之前的功能中,我们对于用户的权限进行了校验,用户访问某些没有权限的url会显示无法访问,没有权限;

这只是对url级别进行了限制,我们对于权限的限制其实可以控制到某个页面的按钮,链接等;

如上图,如果当前登录用户没有添加用户的权限,那么我们就不应该给该用户展示该按钮!
这就是把权限进一步缩小了。

要实现这个功能,我们可以利用django中的自定义模板

例如:对应下面这个按钮,我们需要当该登录用户有权限时,在展示到页面上

<a href="{% url 'customer_add' %}" class="btn btn-success">
	<span class="glyphicon glyphicon-plus-sign"></span>新建
</a>

处理逻辑步骤:

  • 可以用自定义标签simple_tag,也可以用自定义模板inclsion_tag,我们这里先也simgle_tag做
from django import template
from django.conf import settings
from django.shortcuts import reverse
from django.utils.safestring import mark_safe

register = template.Library()


def is_permission(request, name):
    # 上述传入*args和**kwargs的作用是为了防止传来的url带不定参数,比如编辑和删除按钮
    # 1.根据传入的request获取当前用户的角色
    current_role = request.user.role

    # 2.去settings里读取该用户所拥有的权限字典
    permission_dict = settings.USER_PERMISSION[current_role]

    # 3.根据传入的url的name查看该name是否在权限字典内
    if name in permission_dict:
        return True

    # 判断是否有公共权限
    if name in settings.USER_PERMISSION_PUBLIC:
        return True


@register.simple_tag
def add_permission(request, name, *args, **kwargs):
    # 判断是否有权限
    if not is_permission(request, name):
        return ''

    # 4.有权限,返回按钮标签
    # 根据name和不定参数,反向生成url
    url = reverse(name, args=args, kwargs=kwargs)

    # 5.返回对应标签内容字符串,并用make_safe包裹
    tag = """
            <a href="{}" class="btn btn-success">
            <span class="glyphicon glyphicon-plus-sign"></span>新建
        </a>
    """.format(url)
    return mark_safe(tag)

@register.simple_tag
def edit_permission(request, name, *args, **kwargs):
    # 判断是否有权限
    if not is_permission(request, name):
        return ''

    # 4.有权限,返回按钮标签
    # 根据name和不定参数,反向生成url
    url = reverse(name, args=args, kwargs=kwargs)

    # 5.返回对应标签内容字符串,并用make_safe包括
    tag = """
         <a href="{}">
                        <button class="btn btn-sm btn-primary">编辑</button>
                    </a>
    """.format(url)
    return mark_safe(tag)

@register.simple_tag
def del_permission(request, name, *args, **kwargs):
    # 判断是否有权限
    if not is_permission(request, name):
        return ''

    # 4.取到要删除的行id
    rid = args[0]

    # 5.返回对应标签内容字符串,并用make_safe包括
    tag = """
        <button class="btn btn-sm btn-danger btn-del" row-id="{}">删除</button>
    """.format(rid)
    return mark_safe(tag)

  • 前端对应的添加、编辑、删除按钮就可以进行替换了
# 先加载自定义的simple_tag
{% load permission %}

# 添加按钮替换
    {% add_permission request 'customer_add' %}

# 编辑和删除按钮替换
     {% edit_permission request 'customer_edit' pk=item.id  %}
     {% del_permission request 'customer_del' item.id %}

这样,当我们修改配置文件里用户访问的权限时,对应页面的按钮就可以动态出现了

  • 小bug

当我们把编辑和删除按钮都去除的时候,页面显示是下图这样的,我们发现操作列还存在,我们想要当编辑和删除权限都没有的时候,就动态连操作列都不要生成了,那怎么做呢?

image

处理思路:

我们可以对于整体的td进行判断,如果这个td拥有编辑和删除权限之一,就展示该td,都没有该权限,则不展示该td

而simple_tag不支持放在if后面判断,所以,我们可以使用自定义filter
注意filter过滤器只支持传两个参数,我们需要传三个参数,我们可以将request当做一个,剩下两个参数以,拼接成一个,传到filter里,在进行拆分获取!!!
# filter过滤器
@register.filter
def has_permission(reqeust,others):
    name_list = others.split(',')
    for name in name_list:
        status = is_permission(reqeust,name)
        if status:
            return True

前端页面

            {% if request|has_permission:'customer_edit,customer_del' %}
                <th>操作</th>
            {% endif %}

                {% if request|has_permission:'customer_edit,customer_del' %}
                    <td>
                        {% edit_permission request 'customer_edit' pk=item.id %}
                        {% del_permission request 'customer_del' item.id %}
                    </td>
                {% endif %}

标签:判断,name,permission,request,tag,按钮,权限
From: https://www.cnblogs.com/suncolor/p/17536410.html

相关文章

  • Linux权限理解
    一、Linux用户的概念1.普通用户除root用户以外的用户都是普通用户,普通用户的权限受到制约2.超级用户(root)root用户也就是超级用户,不受权限的约束二、不同用户之间的转换1.普通用户切换root用户指令:su如上图所示,普通用户lj的命令行提示符为 $,切换root用户只需要输入指令:su,然......
  • Linux 特殊权限和 ACL 权限管理
    Linux上有三种特殊权限,分别是setuid,setgid,sticky。对应权限的数值分别为4,2,1。对应权限的字母分别为s,s,t。对应的操作分别为chmodu+sfile,chmodg+sdir,chmodo+tdir,对应的操作也支持将字母替换为数字 setuid:一般作用于二进制文件,二进制文件在设置了该权限后,用户在执行......
  • C#自定义checkBox开关按钮控件,设计漂亮美观的UI按钮
    第一步:先准备开关按钮要使用到的背景图片,一张是开启的,一张是关闭的,如下图: 一共有6种款式,大家也可以全部加进去    然后将这些图片作为资源文件添加到项目中,如下图: 第二步、新建用户控件,命名为:ButtonCheck.cs ButtonCheck.cs代码如下:///<su......
  • NTFS权限
    一、NTFS权限概述1、通过设置NTFS权限,实现不同的用户访问不同的权限2、分配了正确的访问权限后,用户才能访问其资源3、设置权限防止资源被篡改、删除 二、文件系统概述文件系统即在外部存储设备上组织文件的方法常用的文件系统:FATwindowsNTFSwindowsEX......
  • linux 文件与目录权限
    在Linux中,文件和目录权限是控制对其访问和操作的重要机制。每个文件和目录都有一组权限,用于定义不同用户对其执行读取、写入和执行等操作的权限级别。以下是对Linux文件和目录权限的详细讲解,并举例说明:1.文件权限:-文件权限包括读取(r)、写入(w)和执行(x)三种权限。-读取权......
  • 关于安卓客户端 软键盘弹出后,导致底部按钮看不见的处理方法
    问题产生原因:安卓:软键盘弹出后会改变页面的高度将页面顶上来。使用fixed或者absolute,会使得元素跟随body的底部移动,而安卓端软键盘将导致body高度变小而导致变形。IOS端:苹果的软键盘是覆盖的(分层),因此没有什么问题。 解决思路:记录页面高度,在键盘收起后,恢复原来高度 ......
  • 返回顶部的按钮制作
    一、我们的需求1、滚动条滚动超过临界点的时候,顶部通栏显示,未超过就隐藏2、滚动条滚动超过临界点,回到顶部按钮显示,未超过就隐藏3、点击回到顶部按钮,滚动条滚动回到顶部二、布局结构1.需要一个顶部标签和一个回到顶部按钮标签2.让页......
  • 前端Vue自定义顶部导航栏navBar 导航栏搜索框searchBar 导航栏右侧菜单按钮button
    前端Vue自定义顶部导航栏navBar导航栏搜索框searchBar导航栏右侧菜单按钮button,下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13342效果图如下:cc-headerSearch使用方法<!--icon:右侧菜单图标@searchClick:搜索点击 @rigIconClick:右......
  • 按钮倒计时
    <el-buttonsize="default":loading="codeLoading"@click="getCode"><spanv-show="!codeLoading">获取验证码</span>......
  • python条件判断语句
    if条件判断语句if条件:(缩进)语句块一语句块二python的条件判断语句是没有括号的,对于所匹配的代码块的精准定位是通过缩进实现的,这是python的一大特色。、if条件:   语句块一else:   语句块二如果还有更多条件的话可以引入elifif条件:   语句块一e......