在用户模型下定义属性和方法,用于判断用户的权限

@property
def permissions(self):
""" 返回用户拥有的所有权限 """
if not self.roles: # 判断用户是否绑定角色
return 0
all_permissions = 0
for role in self.roles:
all_permissions |= role.permissions # 把权限加起来
return all_permissions def has_permission(self, permission):
""" 判断用户是否拥有指定权限 """
return self.permissions & permission == permission @property
def is_dveloper(self):
""" 判断是否为开发者权限 """
return self.has_permission(CMSPersmission.ALL_PERMISSION)

写个测试脚本,测试一下,当前应该所有用户均没有所有权限

@manager.command
def test_permission():
user = CMSUser.query.first()
if user.has_permission(CMSPermission.VISITOR):
print('此用户有访问者权限')
else:
print('此用户无访问者权限')

给用户分配角色

@manager.option('-e', '--email', dest='email')
@manager.option('-n', '--name', dest='name')
def add_user_to_role(email, name):
user = CMSUser.query.filter_by(email=email).first()
if user:
role = CMSRole.query.filter_by(name=name).first()
if role:
role.users.append(user)
db.session.commit()
print('用户角色绑定成功')
else:
print(f'权限{role}不存在')
else:
print(f'邮箱{email}不存在')

python manager.py add_user_to_role -e 122@qq.com -n 访问者

再用命令行查看权限:python manager.py test_permission

一百零八:CMS系统之封装权限判断功能的更多相关文章

  1. 一百一十一:CMS系统之后端权限验证功能

    实现方式 使用装饰器的形式,将权限判断加在视图上 声明接口需要什么权限,用户访问接口的时候,判断用户是否有此权限 权限判断,接收权限 def permission_required(permissio ...

  2. 一百四十四:CMS系统之评论布局和功能二

    在base页加一个登录标识符 给加页面两个id,方便取值 js $(function () { //初始化ueditor var ue = UE.getEditor('editor', { 'serv ...

  3. 一百四十三:CMS系统之评论布局和功能一

    模型 class CommentModel(db.Model): """ 评论 """ __tablename__ = 'comment' ...

  4. net开源cms系统

    .net开源cms系统推荐 内容目录: 提起开源cms,大家第一想到的是php的cms,因为php开源的最早,也最为用户和站长们认可,随着各大cms系统的功能的不断完善和各式各样的开源cms的出现,. ...

  5. Laravel系列之CMS系统学习 — 角色、权限配置【2】

    一.RBAC分析 基于角色的权限访问控制(Role-Based Access Control),这里存在这么几个玩意儿:角色.权限,用户 表:roles.permissions.role_has_pe ...

  6. (Entity framework 应用篇)把权限判断封装在数据库访问层

    这里,我只是以一个例子,说一下简单权限控制,通过这个例子,大家可以设计庞大的权限管理层,把权限控制封装到数据库访问层,这样程序员就不用再写权限判断的代码了 首先,先看看我数据库DBContext的定义 ...

  7. 修改struts2自定义标签的源代码,在原有基础上增加功能(用于OA项目权限判断,是否显示某个权限)

    OA项目在做权限判断时  原始方式: 现在完成的功能 :通过改变struts2自定标签源代码   在原有的基础上  增加判断权限的功能  而页面上使用标签的方式 还是下图 步骤: 打开文件 搜索< ...

  8. 一百零九:CMS系统之前端根据不同权限渲染不同菜单

    给用户绑定为开发者 个人信息中渲染角色和权限 {% extends 'cms/cms_base.html' %} {% block title %} 个人信息{% endblock %} {% blo ...

  9. axios实现类似form传值的格式,以及实现拦截器功能,response拦截实现权限判断

    import axios from 'axios' import Qs from 'qs' // 超时设置 const service = axios.create({ transformReques ...

随机推荐

  1. 微信小程序开发(五)数据绑定

    承接上篇博客. // index.js Page({ data: { time: (new Date()).toString(), addr: "北京" }, but: funct ...

  2. win10快速设置环境变量

    同时按WIN+R键,打开“运行”对话框,输入sysdm.cpl,按回车键打开“系统属性”. 在系统属性对话框中选择“高级”选项卡.

  3. python pip 出现locations that require TLS/SSL异常处理方法

    python pip 出现locations that require TLS/SSL异常处理方法 转载 郑才华 发布于2018-03-24 21:41:16 阅读数 51844 收藏 展开 最近在r ...

  4. 【经典dp 技巧】8.13序列

    经典的拆绝对值 题目大意 给定$n$个具有顺序的序列,允许对每个序列循环移动.记第$i$个序列尾元素为$x$,$i+1$个序列首元素为$y$,定义其连接收益为$|x-y|*i$,求$n$个序列连接最大 ...

  5. 接口调用实现类&& 为什么Autowired定义在接口上

    1.接口与回调 package edu.cqu.interfaceTest; import java.awt.Toolkit; import java.awt.event.ActionEvent; i ...

  6. 数据结构与算法——常用排序算法及其Java实现

    冒泡排序 原理:依次比较相邻的两个数,将小数放在前面(左边),大数放在后面(右边),就像冒泡一样具体操作:第一趟,首先比较第1个和第2个数,将小数放前,大数放后.然后比较第2个数和第3个数,将小数放前 ...

  7. Series拼接回DataFrame

    从这样的表,如何计算一行汇总层拼接回去

  8. django session 加密cookie型

    a. 配置 settings.py           SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'   # 引 ...

  9. C# WebClient 的文件上传下载

    上传文件 string path = openFileDialog1.FileName; WebClient wc = new WebClient(); wc.Credentials = Creden ...

  10. generator如何使用

    把包安装好,然后配好,然后运行就可以了