zoukankan      html  css  js  c++  java
  • 36、Flask实战第36天:客户端权限验证

     编辑cms_base.html

    <li><a href="#">{{ g.cms_user.username }}<span>[超级管理员]</span></a></li>
    
    改为
    <li><a href="{{ url_for('cms.profile') }}">{{ g.cms_user.username }}</a></li>
    <li class="nav-group user-manage"><a href="#">用户管理</a></li>
    <li class="role-manage"><a href="#">组管理</a></li>
    
    改为
    <li class="nav-group user-manage"><a href="#">前台用户管理</a></li>

    编辑cms_profile.html

    ...
            <tr>
                <td>角色</td>
                <td>
                    {% for role in g.cms_user.roles %}
                        {{ role.name }}
                        {% if not loop.last %},{% endif %}
                    {% endfor %}
                </td>
            </tr>
            <tr>
                <td>权限</td>
                <td>
                    {% for role in g.cms_user.roles %}
                        {{ role.desc }}
                        {% if not loop.last %}/{% endif %}
                    {% endfor %}
                </td>
            </tr>
    ...

    客户端权限:不同的权限展示不同的页面

    首页,添加测试用户并加入到角色中

    username email password rule
    admin heboan@qq.com 123456 开发者(该账号已有)
    gl gl@qq.com 123456 管理员
    yy yy@qq.com 123456 运营
    fw fw@qq.com 123456 访问者
    python manage.py create_cms_user -u gl -e gl@qq.com -p 123456
    python manage.py add_user_to_rule -e gl@qq.com -n 管理员
    
    python manage.py create_cms_user -u yy -e yy@qq.com -p 123456
    python manage.py add_user_to_rule -e yy@qq.com -n 运营
    
    python manage.py create_cms_user -u fw -e fw@qq.com -p 123456
    python manage.py add_user_to_rule -e fw@qq.com -n 访问者

    编辑cms_base.html

    比如只有用户含有访问者权限才能看到个人中心,我们可能会如下写

     

    但是模板中并不能直接使用CMSPermission.VISITOR变量,因为变量只有从后台传过来才能使用,然后CMSPermission.VISITOR只是在models中的一个类属性。因此要使用它,我们必须在视图函数中把它传递过来。为了避免单独在每个需要此类属性值的视图函数中都要传递,我们可以利用上下文钩子函数,这样,每个模板都自动有了此钩子函数设置的变量值了。

    之前,我们写了个文件cms/hook.py专门用来写cms 下的钩子函数,所以编辑cms/hook.py

    ...
    from .models import  CMSPersmission
    
    @bp.context_processor
    def context_processor():
        return {'CMSPersmission': CMSPersmission}

    修改后cms_base.html如下

        <li class="unfold"><a href="{{ url_for('cms.index') }}">首页</a></li>
    
        {% if g.cms_user.has_permission(CMSPersmission.VISITOR) %}
            <li class="profile-li">
            <a href="#">个人中心<span></span></a>
            <ul class="subnav">
                <li><a href="{{ url_for('cms.profile') }}">个人信息</a></li>
                <li><a href="{{ url_for('cms.resetpwd') }}">修改密码</a></li>
                <li><a href="{{ url_for('cms.resetemail') }}">修改邮箱</a></li>
            </ul>
        </li>
        {% endif %}
      
      {% if g.cms_user.has_permission(CMSPersmission.POSTER) %}
          <li class="nav-group post-manage"><a href="#">帖子管理</a></li>
      {% endif %}
      
      {% if g.cms_user.has_permission(CMSPersmission.COMMENTER) %}
          <li class="comments-manage"><a href="#">评论管理</a></li>
      {% endif %}
      
      {% if g.cms_user.has_permission(CMSPersmission.BOARDER) %}
          <li class="board-manage"><a href="#">板块管理</a></li>
      {% endif %}
      
      {% if g.cms_user.has_permission(CMSPersmission.FRONTUSER) %}
          <li class="nav-group user-manage"><a href="#">前台用户管理</a></li>
      {% endif %}
    
      {% if g.cms_user.has_permission(CMSPersmission.CMSUSER) %}
          <li class="nav-group cmsuser-manage"><a href="#">CMS用户管理</a></li>
      {% endif %}
      
      {% if g.cms_user.has_permission(CMSPersmission.ADMIN) %}
          <li class="cmsrole-manage"><a href="#">CMS组管理</a></li>
      {% endif %}
      
    </ul>

     

  • 相关阅读:
    Java学习(零)
    WP7 Toolkit ExpanderView 控件 介绍 01
    WP7 Tip:改变启动页
    WP7 Toolkit LoopingSelector 控件 介绍
    azkaban hdfs plugin 配置
    修改hostname
    hybris Models
    hadoop 2.6 安装配置
    hadoop CDH5.1.0 配置kerberos
    flumengtaildirectorysource 修改调试可用
  • 原文地址:https://www.cnblogs.com/sellsa/p/9459418.html
Copyright © 2011-2022 走看看