用户角色
角色分为游客、普通用户、协管员、管理员
用户权限
用户在权限范围内做访问指定页面、增删查改等数据操作权限
数据库的角色和权限
权限表
权限 | 位值 | 说明 |
---|---|---|
关注用户 | 0b0000001(0x01) | 关注其他用户 |
在他人文章中发表评论 | 0b0000010(0x02) | 在他人撰写文章中发布评论 |
写文章 | 0b0000100(0x04) | 写原创文章 |
管理他人发表的评论 | 0b0001000(0x08) | 查处他人发表不当评论 |
管理员权限 | 0b1000000(0x80) | 管理网站 |
权限的叠加是按位与运算,列如:拥有关注用户和写文章的权限应当是0b00000001&0b00000100,结果是0b00000101。
也容易反推出,0b00000011是0b00000001&0b00000010,因此权限是:关注用户和在他人文章中写评论。
用户不同角色在数据库存储,使用权限位值作为角色的一个字段,存储采用按位或。
Flask权限管理
定义权限类Permission;
# app/models.py
class Permission:
ONLY_QUERY = 0x01#仅查询
FORBID = 0x03#封号
ASSIGN= 0x07#分配行号
ADMINISTRATOR = 0x0f#这个权限要异或
新建数据表Role
字段:
id(Integer, 主键)
name(String)
permission(Integer)
default(boolean)
users(指向User模型的对外关系,反向赋予User一个role属性,通过User.role访问Role模型)
静态方法
@staticmethod可以直接通过类访问,无需创建实例。
作用
初始化Role数据表中的数据。
代码实现
# app/models.py
class Role(db.Model):
# 定义Role的数据库模型
__tablename__ = 'roles'
id = db.Column(db.Integer, primary_key=True)
# 该用户角色名称
name = db.Column(db.String(64), unique=True)
# 该用户角色对应的权限
permissions = db.Column(db.Integer)
# 该用户角色是否为默认
default = db.Column(db.Boolean, default=False, index=True)
# 角色为该用户角色的所有用户
users = db.relationship('User', backref='role', lazy='dynamic')
@staticmethod
def insert_role():
roles
版权声明:本文为weixin_43829548原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。