flask的权限管理

  • Post author:
  • Post category:其他




用户角色

角色分为游客、普通用户、协管员、管理员



用户权限

用户在权限范围内做访问指定页面、增删查改等数据操作权限



数据库的角色和权限

权限表

权限 位值 说明
关注用户 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 版权协议,转载请附上原文出处链接和本声明。