zoukankan      html  css  js  c++  java
  • 一百零八:CMS系统之封装权限判断功能

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

    @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

  • 相关阅读:
    第1章:路线图
    第0章:战胜恐惧和懊悔
    c++ 变量 定义 声明
    两个无符号数相减 可以得到负数
    c++ cast operator(类型转换操作符)
    C++中static 的使用方式,以及与c中的static的区别
    重载overload 重写override 重定义redefining
    用到位运算的题目
    C++ 虚函数表解析
    虚函数 动态绑定 实现方式是:虚函数表
  • 原文地址:https://www.cnblogs.com/zhongyehai/p/11931272.html
Copyright © 2011-2022 走看看