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>

 

原文地址:https://www.cnblogs.com/sellsa/p/9459418.html