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 | 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>
每天进步一点,加油!