BBS论坛(十)

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

(1)cms/cms_profile

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

  <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>

(2)cms/hooks.py

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

(3)cms/cms_base.html

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

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

(4)添加用户和角色

#添加访问者
python manage.py create_cms_user -u 我是访问者 -p 123456 -e 11111@qq.com python manage.py add_user_to_role -e 11111@qq.com -n 访问者 #添加运营者
python manage.py create_cms_user -u 我是运营者 -p 123456 -e 22222@qq.com python manage.py add_user_to_role -e 22222@qq.com -n 运营 #添加管理员
python manage.py create_cms_user -u 我是管理员 -p 123456 -e 33333@qq.com python manage.py add_user_to_role -e 33333@qq.com -n 管理员

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

开发者

访问者

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

(1)后台剩余的html页面

cms_posts.html

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

{% block title %}
帖子管理
{% endblock %} {% block head %} {% endblock %} {% block page_title %}
{{ self.title() }}
{% endblock %} {% block main_content %}
帖子管理页面
{% endblock %}

其它几个一样

cms_comments.html
cms_boards.html
cms_fusers.html
cms_cusers.html
cms_croles.html

(2)cms/decorators.py

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

def permission_required(permission):
def outter(func):
@wraps(func)
def inner(*args,**kwargs):
user = g.cms_user
if user.has_permission(permission):
return func(*args,**kwargs)
else:
return redirect(url_for('cms.index'))
return inner
return outter

(3)cms/views.py

@bp.route('/posts/')
@login_required
@permission_required(CMSPermission.POSTER)
def posts():
return render_template('cms/cms_posts.html') @bp.route('/comments/')
@login_required
@permission_required(CMSPermission.COMMENTER)
def comments():
return render_template('cms/cms_comments.html') @bp.route('/boards/')
@login_required
@permission_required(CMSPermission.BOARDER)
def boards():
return render_template('cms/cms_boards.html') @bp.route('/fusers/')
@login_required
@permission_required(CMSPermission.FRONTUSER)
def fusers():
return render_template('cms/cms_fusers.html') @bp.route('/cusers/')
@login_required
@permission_required(CMSPermission.CMSUSER)
def cusers():
return render_template('cms/cms_cusers.html') @bp.route('/croles/')
@login_required
@permission_required(CMSPermission.ALL_PERMISSION)
def croles():
return render_template('cms/cms_croles.html')

(4)cms/cms_base.html

修改url链接

 {% 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 %}

end。。。

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


最新文章

  1. Joshua Bloch错了? ——适当改变你的Builder模式实现
  2. JavaScript数据类型 typeof, null, 和 undefined
  3. Hibernate之映射一对一关联
  4. 八、天气App案例
  5. 重构第31天 使用多态替代条件语句( Replace conditional with Polymorphism)
  6. Bzoj2705 Longge的问题
  7. Dos del参数与作用(/f/s/q)
  8. HTML: xhtml和html的區別
  9. iOS - (简单平移动画/弹出View的使用)
  10. scikit-learn 机器学习工具包
  11. Ubuntu封装制作ISO镜像
  12. ETL之增量抽取方式
  13. Linux内核Radix Tree(二)
  14. 学习笔记_Filter小结(过滤器JavaWeb三大组件之一)
  15. Caffe--solver.prototxt配置文件 参数设置及含义
  16. Android性能测试工具Emmagee
  17. (转)Linux修改SSH登录欢迎语
  18. ArrayDataProvider数据分页
  19. 1、Python2.7编译安装
  20. MangoDB高级应用

热门文章

  1. Verilog 语言 001 --- 入门级 --- 编写一个半加器电路模块
  2. Luogu 3008 [USACO11JAN]道路和飞机Roads and Planes
  3. Fast Scatter-Gather I/O
  4. WPF开源界面库
  5. Data Base mysql备份与恢复
  6. Http工作原理(转)
  7. Object Detection: Face Detection using Haar Cascades
  8. oracle数据结构
  9. luogu4430 小猴打架
  10. Express全系列教程之(十):jade模板引擎