10.1.客户端权限验证功能完成

(1)cms/cms_profile

显示当前用户的角色和权限

  1. <tr>
  2. <td>角色:</td>
  3. <td>
  4. {% for role in user.roles %}
  5. {{ role.name }}
  6. {% if not loop.last %},{% endif %}
  7. {% endfor %}
  8. </td>
  9. </tr>
  10. <tr>
  11. <td>权限:</td>
  12. <td>
  13. {% for role in user.roles %}
  14. {{ role.desc }}
  15. {% if not loop.last %}/{% endif %}
  16. {% endfor %}
  17. </td>
  18. </tr>

(2)cms/hooks.py

  1. @bp.context_processor
  2. def cms_context_pocessor():
  3. return {'CMSPermission':CMSPermission}

(3)cms/cms_base.html

不同的角色,显示不同的内容

  1. {% set cms_user = g.cms_user %}
  2. {% if cms_user.has_permission(CMSPermission.POSTER) %}
  3. <li class="nav-group post-manage"><a href="#">帖子管理</a></li>
  4. {% endif %}
  5.  
  6. {% if cms_user.has_permission(CMSPermission.COMMENTER) %}
  7. <li class="comments-manage"><a href="#">评论管理</a></li>
  8. {% endif %}
  9.  
  10. {% if cms_user.has_permission(CMSPermission.BOARDER) %}
  11. <li class="board-manage"><a href="#">板块管理</a></li>
  12. {% endif %}
  13.  
  14. {% if cms_user.has_permission(CMSPermission.FRONTUSER) %}
  15. <li class="nav-group user-manage"><a href="#">前台用户管理</a></li>
  16. {% endif %}
  17.  
  18. {% if cms_user.has_permission(CMSPermission.CMSUSER) %}
  19. <li class="nav-group cmsuser-manage"><a href="#">CMS用户管理</a></li>
  20. {% endif %}
  21.  
  22. {% if cms_user.is_developer %}
  23. <li class="cmsrole-manage"><a href="#">CMS组管理</a></li>
  24. {% endif %}

(4)添加用户和角色

  1. #添加访问者
  2. python manage.py create_cms_user -u 我是访问者 -p 123456 -e 11111@qq.com
  3.  
  4. python manage.py add_user_to_role -e 11111@qq.com -n 访问者
  5.  
  6. #添加运营者
  7. python manage.py create_cms_user -u 我是运营者 -p 123456 -e 22222@qq.com
  8.  
  9. python manage.py add_user_to_role -e 22222@qq.com -n 运营
  10.  
  11. #添加管理员
  12. python manage.py create_cms_user -u 我是管理员 -p 123456 -e 33333@qq.com
  13.  
  14. python manage.py add_user_to_role -e 33333@qq.com -n 管理员

不同的用户登录到后台cms显示不同的内容

开发者

访问者

10.2.服务端权限验证功能完成

(1)后台剩余的html页面

cms_posts.html

  1. {% extends 'cms/cms_base.html' %}
  2.  
  3. {% block title %}
  4. 帖子管理
  5. {% endblock %}
  6.  
  7. {% block head %}
  8.  
  9. {% endblock %}
  10.  
  11. {% block page_title %}
  12. {{ self.title() }}
  13. {% endblock %}
  14.  
  15. {% block main_content %}
  16. 帖子管理页面
  17. {% endblock %}

其它几个一样

  1. cms_comments.html
  2. cms_boards.html
  3. cms_fusers.html
  4. cms_cusers.html
  5. cms_croles.html

(2)cms/decorators.py

添加一个权限验证的装饰器

  1. def permission_required(permission):
  2. def outter(func):
  3. @wraps(func)
  4. def inner(*args,**kwargs):
  5. user = g.cms_user
  6. if user.has_permission(permission):
  7. return func(*args,**kwargs)
  8. else:
  9. return redirect(url_for('cms.index'))
  10. return inner
  11. return outter

(3)cms/views.py

  1. @bp.route('/posts/')
  2. @login_required
  3. @permission_required(CMSPermission.POSTER)
  4. def posts():
  5. return render_template('cms/cms_posts.html')
  6.  
  7. @bp.route('/comments/')
  8. @login_required
  9. @permission_required(CMSPermission.COMMENTER)
  10. def comments():
  11. return render_template('cms/cms_comments.html')
  12.  
  13. @bp.route('/boards/')
  14. @login_required
  15. @permission_required(CMSPermission.BOARDER)
  16. def boards():
  17. return render_template('cms/cms_boards.html')
  18.  
  19. @bp.route('/fusers/')
  20. @login_required
  21. @permission_required(CMSPermission.FRONTUSER)
  22. def fusers():
  23. return render_template('cms/cms_fusers.html')
  24.  
  25. @bp.route('/cusers/')
  26. @login_required
  27. @permission_required(CMSPermission.CMSUSER)
  28. def cusers():
  29. return render_template('cms/cms_cusers.html')
  30.  
  31. @bp.route('/croles/')
  32. @login_required
  33. @permission_required(CMSPermission.ALL_PERMISSION)
  34. def croles():
  35. return render_template('cms/cms_croles.html')

(4)cms/cms_base.html

修改url链接

  1. {% set cms_user = g.cms_user %}
  2. {% if cms_user.has_permission(CMSPermission.POSTER) %}
  3. <li class="nav-group post-manage"><a href="{{ url_for('cms.posts') }}">帖子管理</a></li>
  4. {% endif %}
  5.  
  6. {% if cms_user.has_permission(CMSPermission.COMMENTER) %}
  7. <li class="comments-manage"><a href="{{ url_for('cms.comments') }}">评论管理</a></li>
  8. {% endif %}
  9.  
  10. {% if cms_user.has_permission(CMSPermission.BOARDER) %}
  11. <li class="board-manage"><a href="{{ url_for('cms.boards') }}">板块管理</a></li>
  12. {% endif %}
  13.  
  14. {% if cms_user.has_permission(CMSPermission.FRONTUSER) %}
  15. <li class="nav-group user-manage"><a href="{{ url_for('cms.fusers') }}">前台用户管理</a></li>
  16. {% endif %}
  17.  
  18. {% if cms_user.has_permission(CMSPermission.CMSUSER) %}
  19. <li class="nav-group cmsuser-manage"><a href="{{ url_for('cms.cusers') }}">CMS用户管理</a></li>
  20. {% endif %}
  21.  
  22. {% if cms_user.is_developer %}
  23. <li class="cmsrole-manage"><a href="{{ url_for('cms.croles') }}">CMS组管理</a></li>
  24. {% endif %}

BBS论坛(十)的更多相关文章

  1. Python之路【第十八篇】Django小项目简单BBS论坛部分内容知识点

    开发一个简单的BBS论坛 项目需求: 整体参考“抽屉新热榜” + “虎嗅网” 实现不同论坛版块 帖子列表展示 帖子评论数.点赞数展示 在线用户展示 允许登录用户发贴.评论.点赞 允许上传文件 帖子可被 ...

  2. python 学习笔记二十 django项目bbs论坛

    项目:开发一个简单的BBS论坛 需求: 整体参考“抽屉新热榜” + “虎嗅网” 实现不同论坛版块 帖子列表展示 帖子评论数.点赞数展示 在线用户展示 允许登录用户发贴.评论.点赞 允许上传文件 帖子可 ...

  3. python第一百三十天 ---简单的BBS论坛

    简单的BBS论坛 实现功能 git仓库地址:https://github.com/uge3/BBS 1.整体参考“抽屉新热榜” + “博客园” 2.实现不同论坛版块 3.帖子列表展示 4.个人博客主页 ...

  4. 开源BBS论坛软件推荐

    七款开源BBS论坛软件推荐(1) 本文介绍了七个开源的BBS论坛软件(在英文界一般叫做Forum).可能国内的朋友们比较熟悉Discuz!和PHPwind,但其实我们的选择还是很多的,而且下面介绍的这 ...

  5. Python之路,Day17 - 分分钟做个BBS论坛

    Python之路,Day17 - 分分钟做个BBS论坛   本节内容: 项目:开发一个简单的BBS论坛 需求: 整体参考"抽屉新热榜" + "虎嗅网" 实现不同 ...

  6. Django小项目简单BBS论坛

    开发一个简单的BBS论坛 项目需求: 1 整体参考"抽屉新热榜" + "虎嗅网" 2 实现不同论坛版块 3 帖子列表展示 4 帖子评论数.点赞数展示 5 在线用 ...

  7. Python开发一个简单的BBS论坛

    项目:开发一个简单的BBS论坛 需求: 整体参考“抽屉新热榜” + “虎嗅网” 实现不同论坛版块 帖子列表展示 帖子评论数.点赞数展示 在线用户展示 允许登录用户发贴.评论.点赞 允许上传文件 帖子可 ...

  8. bbs论坛浏览器兼容性问题

    一直都是在chrome上进行调试,今天终于把bbs论坛这个项目搭建完了,进入IE.Firefox看了看 吓哭了!!! 火狐 Edge chrome 特别是加了<!DOCTYPE html> ...

  9. LNMP环境搭建BBS论坛及伪静态

    我们在mysql备份 LNMP环境中的数据库迁移为独立的服务器的基础上搭建BBS论坛:  [root@bqh-117 ~]# mysql -uroot -p123456 Welcome to the ...

  10. Django项目 BBS论坛

    BBS论坛 一.项目表分析 二.自定义form组件 三.注册功能 四.BBS论坛 登录功能

随机推荐

  1. docker修改容器参数

    docker update -m 500m --memory-swap - f669487f0804

  2. 腾讯AI开放平台的使用

    一.腾讯AI开放平台 https://ai.qq.com/ 二.腾讯AI平台支持的功能 三.签名机制 1.计算步骤 用于计算签名的参数在不同接口之间会有差异,但算法过程固定如下4个步骤. 1.将< ...

  3. unity Camera第一人称移动,3中方法实现

    using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : ...

  4. setOnTouchListener在小米手机中不走ACTION_UP而是走ACTION_CANCEL

    单点触控: MotionEvent.ACTION_DOWN:手指 初次接触到屏幕 时触发. MotionEvent.ACTION_MOVE:手指 在屏幕上滑动 时触发,会多次触发. MotionEve ...

  5. 四、自动化平台搭建-Django-如何做验证码

    前提:安装包   pip install pillow==3.4.1 1.打开booktest/views.py,创建视图verify_code. from PIL import Image, Ima ...

  6. c语言第一次作业--分支 顺序结构

    1.1思维导图 1.2.1本周学习体会以及代码量学习体会 1.2.2学习体会 因为在假期时只看了小部分的学习视频,也没有刷题量,导致了在开始就感觉到差同学的进程很多.刚开始觉得老师讲课很快,在恶补了很 ...

  7. 【转廖大神】package.json 包安装

    现在我们遇到第一个问题:koa这个包怎么装,app.js才能正常导入它? 方法一:可以用npm命令直接安装koa.先打开命令提示符,务必把当前目录切换到hello-koa这个目录,然后执行命令: C: ...

  8. AGC001F - Wide Swap

    Description 给你一个长度为$n$的排列,每次可以交换$|i-j|\geq K$并且$|a_i-a_j|=1$的数对,问你经过若干次变换后最小字典序的排列是啥 Solution 对$a$做一 ...

  9. java中的异常(二)

    异常的分类 在使用上 Error不用管他虚拟机错误 Exception必须要用catch抓 RuntimeExcption可以处理也可以不用处理 说明 Error:称为错误,由java虚拟机生成并抛出 ...

  10. 解决audio控制播放音量

    在写手机端项目时,可能会遇到使用audio播放音乐,那么怎样控制audio默认播放的音量呢?下面时解决办法 volume 属于是控制audio 播放音乐的音量,其范围0-1,1表示音量最大 getVi ...