给用户绑定为开发者

个人信息中渲染角色和权限

{% extends 'cms/cms_base.html' %}

{% block title %}
个人信息
{% endblock %} {% block page_title %}
{{ self.title() }}
{% endblock %} {% block main_content %}
{% set user = g.cms_user %}
<table class="table table-bordered">
<tbody>
<tr>
<td>用户名:</td>
<td>{{ user.username }}</td>
</tr>
<tr>
<td>邮箱:</td>
<td>{{ user.email }}</td>
</tr>
<tr>
<td>角色:</td>
<td>
{% for role in user.roles %}
{{ role.name }}
{% if not loop.last %},{% endif %}
{% endfor %}
</td>
</tr>
<tr>
<td>权限:</td>
<td>
{% for role in user.roles %}
{{ role.desc }}
{% if not loop.last %}/{% endif %}
{% endfor %} </td>
</tr>
<tr>
<td>加入时间:</td>
<td>{{ user.join_time }}</td>
</tr>
</tbody>
</table>
{% endblock %}

由于一个用户可能有多个角色,所以这里就不在用户名后面渲染角色,统一给用户名加个链接,跳转到个人中心

创建不同用户分别绑定不同角色

python manager.py create_cms_user -u 访问者用户 -p 123456 -e 133@qq.com
python manager.py add_user_to_role -e 133@qq.com -n 访问者

python manager.py create_cms_user -u 运营用户 -p 123456 -e 144@qq.com
python manager.py add_user_to_role -e 144@qq.com -n 运营

python manager.py create_cms_user -u 管理员用户 -p 123456 -e 155@qq.com
python manager.py add_user_to_role -e 155@qq.com -n 管理员

在钩子函数中使用蓝图.context_processor,以后只要是此蓝图返回的模板,都会携带此数据

@bp.context_processor
def cms_context_processor():
""" 返回权限 """
return {"CMSPermission": CMSPersmission}

根据权限判断渲染的菜单

{% set cms_user = g.cms_user %}
{% if cms_user.has_permission(CMSPermission.POSTER) %}
  <li class="nav-group post-manage"><a href="{{ url_for('cms.posts') }}">帖子管理</a></li>
{% endif %}
{% if cms_user.has_permission(CMSPermission.COMMENTER) %}
  <li class="comments-manage"><a href="{{ url_for('cms.comments') }}">评论管理</a></li>
{% endif %}
{% if cms_user.has_permission(CMSPermission.BOARDER) %}
  <li class="board-manage"><a href="{{ url_for('cms.boards') }}">板块管理</a></li>
{% endif %}
{% if cms_user.has_permission(CMSPermission.FRONTUSER) %}
  <li class="nav-group user-manage"><a href="{{ url_for('cms.fusers') }}">前台用户管理</a></li>
{% endif %}
{% if cms_user.has_permission(CMSPermission.CMSUSER) %}
  <li class="nav-group cmsuser-manage"><a href="{{ url_for('cms.cusers') }}">CMS用户管理</a></li>
{% endif %}
{% if cms_user.is_developer %}
  <li class="cmsrole-manage"><a href="{{ url_for('cms.croles') }}">CMS组管理</a></li>
{% endif %}

使用不同角色登录

一百零九:CMS系统之前端根据不同权限渲染不同菜单的更多相关文章

  1. 一百三十二:CMS系统之前端动态获取后台添加的轮播图

    先准备几张轮播图 排序顺序改为根据优先级倒序排 前端首页接口 @bp.route('/')def index(): banners = BannerModel.query.order_by(Banne ...

  2. Java开发笔记(一百零九)XML报文的定义和解析

    前面介绍了JSON格式的报文解析,虽然json串短小精悍,也能有效表达层次结构,但是每个元素只能找到对应的元素值,不能体现更丰富的样式特征.比如某个元素除了要传输它的字符串文本,还想传输该文本的类型. ...

  3. 测开之路一百零九:bootstrap列表

    bootstrap列表 引入bootstrap标签 原本的效果 水平显示 bootstrap列表 列表组合框 在组合框后面加备注 突出显示 a标签列表 <!DOCTYPE html>< ...

  4. 一百零九、SAP的OO-ALV之三,屏幕绘制器的使用

    一.在Screen页面,点击格式,会打开屏幕绘制器 二.点击定制控制,和PS一样画出一个显示区域的画布容器 三.双击之后,在弹出的属性页面写入一个名字,保存 四.激活屏幕后关闭 五.关闭屏幕绘制器之后 ...

  5. salesforce零基础学习(一百零九)Lightning Login启用以及配置

    本篇参考:https://help.salesforce.com/s/articleView?id=sf.security_ll_overview.htm&type=5 我们在之前的篇中提到过 ...

  6. CMS系统存储路径

    CMS系统特点:前后端分离 index.html 首页文件index.php 管理后台的页面 api文件夹: 提供的接口 caches文件夹: 缓存文件 html文件夹:  生成的静态页面 phpcm ...

  7. Pagekit – 现代化技术构建的轻量的 CMS 系统

    Pagekit 是一个模块化,轻量的 CMS 系统,基于现代化的技术,如 Symfony 组件和 Doctrine.它提供了一个很好的平台,用于主题和延伸开发.Pagekit 为您提供了工具来创造美丽 ...

  8. django的CMS系统(内容管理系统)

    一.什么是CMS系统 CMS具有许多基于模板的优秀设计,可以减少开发的成本. CMS的功能并不只限于文本处理,它也可以处理图片.Flash动画.声像流.图像甚至电子邮件档案. CMS还分各个平台脚本种 ...

  9. 一个基于NodeJS开发的APP管理CMS系统

    花了大概3周独立开发了一个基于NodeJS的CMS系统,用于公司APP的内容管理( **公司APP?广告放在最后 ^_^ ** ,管理员请理解~~~ )晚上看了部电影还不想睡,闲着也是闲着就作下小小总 ...

随机推荐

  1. 【linux】ubuntu修改系统时间

    ubuntu修改时间步骤 ① 先把系统校验时间的程序停止掉 /lib/systemd/systemd-timesyncd systemd 开始,包括了一个名为systemd-timesyncd 的守护 ...

  2. JAI丢包掉帧处理

    问题 时间戳停止变化/图像停止更新 描述 本小白刚刚接触JAI,有很多不懂的地方.这次遇到问题是请教了YZ大哥(不知道年龄,暂时这么称呼),很感谢YZ大哥的耐心指导.因为我不仅不知道怎么调,连在哪里调 ...

  3. mybatis的简单搭建和使用(一)

    前言 mybatis是一个持久层的框架,那么问题来了,什么是持久层的框架呢,持久层就是把数据持久化的保存到数据库中,这种过程一般叫数据持久化的过程,现为了程序员能够很方便的操作数据库,于是就出现持久层 ...

  4. 07—mybatis注解配置一

    常用注解Select:映射查询的sql语句.SelectProvider:Select语句的动态sql映射.允许指定一个类名和一个方法在执行时返回运行的查询语句.有两个属性:type和mehtod,t ...

  5. CF901C Bipartite Segments[点双+二分+前缀优化]

    不想翻译了,直接放luogu翻译 说了没有偶环,也就是说全是奇环,再结合二分图性质,那么暴力的话,固定左端点,增大序号,加点直到产生环就不合法了.也就是说,任何一个环,只要他上面的数全都被加了,就不合 ...

  6. MFC 列表控件List Control

    一般用带有表头的报表模式,所以属性:View设为Report // OnInitDialog()中 CString str[] = {TEXT("姓名"),TEXT("性 ...

  7. vue上传大文件的解决方案

    众所皆知,web上传大文件,一直是一个痛.上传文件大小限制,页面响应时间超时.这些都是web开发所必须直面的. 本文给出的解决方案是:前端实现数据流分片长传,后面接收完毕后合并文件的思路. 实现文件夹 ...

  8. 【线性代数】3-6:四个子空间的维度(Dimensions of the Four Subspaces)

    title: [线性代数]3-6:四个子空间的维度(Dimensions of the Four Subspaces) categories: Mathematic Linear Algebra ke ...

  9. TextRCNN 文本分类 阅读笔记

    TextRCNN 文本分类 阅读笔记 论文:recurrent convolutional neural networks for text classification 代码(tensorflow) ...

  10. LIUNX 安装 nginx

    安装依赖 yum install gcc yum install pcre-devel yum install zlib zlib-devel yum install openssl openssl- ...