编辑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 开发者(该账号已有)
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>

36、Flask实战第36天:客户端权限验证的更多相关文章

  1. 35、Flask实战第35天:权限设计

    二进制及其相关运算 认识二进制 0,1,2,3,4,5,6,7,8,9,10:逢10进1 0,1:逢2进1 二进制转十进制 十进制 二进制 0 0 1 1 2 10 3 11 4 100 255 11 ...

  2. Flask实战第37天:服务器权限验证

    完成服务器权限验证之前,我们先如下页面先补上 帖子管理 {% extends 'cms/cms_base.html' %} {% block title %} 帖子管理-CMS管理系统 {% endb ...

  3. Flask实战-留言板-安装虚拟环境、使用包组织代码

    Flask实战 留言板 创建项目目录messageboard,从GreyLi的代码中把Pipfile和Pipfile.lock文件拷贝过来,这两个文件中定义了虚拟环境中需要安装的包的信息和位置,进入m ...

  4. 18、Flask实战第18天:Flask-session

    session的基本概念 session和cookie的作用有点类似,都是为了存储用户相关的信息.不同的是,cookie是存储在本地浏览器,session是一个思路.一个概念.一个服务器存储授权信息的 ...

  5. 学习笔记36—坚果云 | Papership或Zotero使用webDAV验证服务器不成功怎么办?

    很多人都喜欢用坚果云作为Zotero的第三方云盘,从而无限扩展Zotero的存储空间.可是大家在Papership或zotero客户端中验证坚果云webDAV服务器时,会出现验证不成功的问题,相信这个 ...

  6. Springboot Oauth2 集成Swagger2权限验证实战

    Swagger是什么?能干什么?在这就不展开讲解了.本文主要讲解如何集成OAuth2的Password模式权限验证,验证接口是否具有权限. 引入依赖 <dependency> <gr ...

  7. Z从壹开始前后端分离【 .NET Core2.2/3.0 +Vue2.0 】框架之五 || Swagger的使用 3.3 JWT权限验证【必看】

    本文梯子 本文3.0版本文章 前言 1.如何给接口实现权限验证? 零.生成 Token 令牌 一.JWT ——自定义中间件 0.Swagger中开启JWT服务 1:API接口授权策略 2.自定义认证之 ...

  8. NET MVC权限验证

    ASP.NET MVC权限验证 封装类 写该权限类主要目地 为了让权限配置更加的灵活,可以根据SQL.json.或者XML的方式来动态进行页面的访问控制,以及没有权限的相关跳转. 使用步骤 1.要建一 ...

  9. WebAPI接口设计:SwaggerUI文档 / 统一响应格式 / 统一异常处理 / 统一权限验证

    为什么还要写这类文章?因为我看过网上很多讲解的都不够全面,而本文结合实际工作讲解了swaggerui文档,统一响应格式,异常处理,权限验证等常用模块,并提供一套完善的案例源代码,在实际工作中可直接参考 ...

随机推荐

  1. ctsc&apio2018八日游

    day0: 早就知道自己是打酱油的..早就做好了打铁的准备.. Q:那你来干嘛 A:当然是来玩啊!!玩啊!啊!! emmmmm 抱着半期考不及格的卷子瑟瑟发抖地上了飞机. day1:报道!当然还有在宾 ...

  2. 动归专题QAQ(两天创造的刷题记录哟!✿✿ヽ(°▽°)ノ✿✿)(未填坑)

    1092 采药:由于没有限制开始时间和结束时间,01背包就好了 1095 开心的金明:01背包,无fuck说 1104 摆花:f[i][j]表示摆了i种花,第i种花摆了j种的方案数,乱转移0.0(感觉 ...

  3. monkey测试===monkeyrunner测试教程(1)

    1.安装测试环境 jdk 安装与配置 android sdk安装与配置 Python编辑器安装与配置 以上安装请自行百度教程 Monkeyrunner使用方法 http://www.android-d ...

  4. python基础===如何优雅的写代码(转自网络)

    本文是Raymond Hettinger在2013年美国PyCon演讲的笔记(视频, 幻灯片). 示例代码和引用的语录都来自Raymond的演讲.这是我按我的理解整理出来的,希望你们理解起来跟我一样顺 ...

  5. Linux内核死锁检测机制【转】

    转自:http://www.oenhan.com/kernel-deadlock-check 死锁就是多个进程(线程)因为等待别的进程已占有的自己所需要的资源而陷入阻塞的一种状态,死锁状态一旦形成,进 ...

  6. codevs 1038 一元三次方程求解 NOIP2001提高组

    题目链接:http://codevs.cn/problem/1038/ 题解: 嗯,exm?才知道二分隶属搜索专题…… 对-100到100枚举,按照题目中的提示,当当fi*fi+1<0时,二分深 ...

  7. 2017多校第8场 HDU 6138 Fleet of the Eternal Throne 思维,暴力

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6138 题意:给了初始区间[-1,1],然后有一些操作,可以r加上一个数,l减掉一个数,或者同时操作,问 ...

  8. webview loadRequest

    // 所构建的NSURLRequest具有一个依赖于缓存响应的特定策略,cachePolicy取得策略,timeoutInterval取得超时值 [self.yourSite loadRequest: ...

  9. VM虚拟机,Linux系统安装tools过程遇到 what is the location of the “ifconfig” program

    安装步骤: 复制到/mnt 解压文件 tar -zxvf VMwareTools-10.1.6-5214329.tar.gz 进入减压文件夹后安装 ./vmware-install.pl ... 一直 ...

  10. 网站服务器压力Web性能测试(2):Webbench:最多模拟3万个并发连接数测试压力

    1.Webbench最多可以模拟3万个并发连接数来测试服务器压力,可以设置压力测试时间和测试请求的成功率.安装Webbench命令: wget https://home.tiscali.cz/~cz2 ...