在用户模型下定义属性和方法,用于判断用户的权限
@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