zoukankan      html  css  js  c++  java
  • 权限管理之左侧菜单管理

    权限管理之左侧菜单管理

    紧接着上次的文章,权限管理之权限粒度控制,我们已经实现了对权限的粒度管理,即在用户有操作权限的时候显示操作按钮。

    我们将权限分组成用户管理和角色管理,现在的需求是在左侧菜单中显示出登录用户能够管理的权限。
    例如,用户 A 有用户管理权限和角色管理权限,通过左侧菜单的按钮能够随意切换要操作的表,用户 B 只有用户管理权限,左侧菜单就只有一个对应的按钮。

    左侧菜单注册

    与之前操作管理类似,需要将我们需要的信息先注册到 session 中,该操作在用户登录时进行。

    首先,分析一下需要存储到 session 中的信息有哪些。与权限粒度管理类似,判断该用户是否有操作权限肯定需要的有权限对应的 url 和 action ,为了显示按钮名字还需要权限组的名称。

    其次,分析存储到 session 中的样式。通过判断是否有权限已经过滤掉了不符合的,只需以元组形式存入 url 和 权限组名称即可。

    注册代码如下:

    # 注册菜单权限
    permissions = user.roles.all().values("permissions__url", "permissions__group__title", "permissions__action").distinct()
    
    menu_permission_list = []
    for item in permissions:
    	if item["permissions__action"] == "list":
    		menu_permission_list.append((item["permissions__url"], item["permissions__group__title"]))
    
    request.session["menu_permission_list"] = menu_permission_list
    

    模板层显示

    将 menu_permission_list 注册到 session 中,通过视图函数赋值后就能在模板层中使用了。

    <div class="menu">
    	<div>
    		{% for item in menu_permission_list %}
    			<p class="menu_btn"><a href="{{ item.0 }}">{{ item.1 }}</a></p>
    		{% endfor %}
    	</div>
    </div>
    

    引入自定义模板标签

    现在已经实现了左侧菜单权限管理,可是存在一个不足,在每个展示表的视图函数中都需要对 menu_permission_list 赋值。我们通过自定义模板标签来解决这个问题。

    关于模板标签的内容可参考:Django的模板与母版

    在这,我们将赋值内容的代码封装到模板标签中:

    # my_tags.py
    
    from django import template
    
    register = template.Library()
    
    @register.inclusion_tag("menu.html")
    def get_menu(request, ):
        menu_permission_list = request.session["menu_permission_list"]
    
        return {"menu_permission_list": menu_permission_list}
    
    <!-- menu.html -->
    <div>
        {% for item in menu_permission_list %}
            <p class="menu_btn"><a href="{{ item.0 }}">{{ item.1 }}</a></p>
        {% endfor %}
    </div>
    

    而模板层的代码也相应改变:

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

    1540611766789

    1540611831281

    GItHub 地址:https://github.com/protea-ban/oldboy/tree/master/9day84

  • 相关阅读:
    使用Azure Rest API获得Access Token介绍
    Azure Service Fabric应用程序日志记录与展现
    Azure Web App创建Python应用
    AzureWeb App如何做私有仓储的部署
    Python web在IIS上发布方法和原理
    [转载]DriverStore文件夹特别大,能删除吗?
    Azure Web APP中Local Git 如何部署分支
    Azure Web 应用如何修改 IIS 配置
    文件上传绕过
    windows下通过配置服务器安全策略指定IP地址远程访问服务器的设置方法
  • 原文地址:https://www.cnblogs.com/banshaohuan/p/9890410.html
Copyright © 2011-2022 走看看