FLASK(9)-用户角色

角色在数据库中的表示

创建一个role表

app/models.py: 角色的权限
class Role(db.Model):
    __tablename__ = 'roles'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String, unique=True)
    default = db.Column(db.Boolean, default=False, index=True) # 默认为False
    permissions = db.Column(db.Integer) #表示位标志
    users = db.relationship('User', backref='role', lazy='dynamic')
  • permissions表示位标志,其值为整数。各操作对应一个位位置,能执行则被标识为1.

关注: 0b00000001
发表评论: 0b00000010
写文章: 0b00000100
管理别人的评论: 0b00001000
管理员权限: 0b00010000

  • 操作权限用八位表示,我们只用了5位。
app/models.py: 权限常量
class Permisson:
    FOLLOW = 0X01
    COMMENT = 0X02
    WRITE_ARTICLES = 0X04
    MODERATE_COMMENTS = 0X08
    ADMINISTOR = 0X80

角色
匿名:0b00000000 未登录的用户,只能阅读
用户:0b00000111 已登陆用户,发布文章、发表评论、关注其他用户
协管员:0b00001111 增加审查不当评论权限
管理员:0b11111111所有权限

  • 使用权限组织角色,这种做法让以后添加新角色时只用组合权限即可。

手动添加角色易出错,自动添加。

app/models.py: 在数据库中创建角色
class Role(db.Model):
    #..
    @staticmethod
    def insert_roles():
        roles = {
            'User': (Permission.FOLLOW | Permission.COMMENT | Permission.WRITE_ARTICLES, True)
            'Moderator': (Permission.FOLLOW | Permission.COMMENT | Permission.WRITE_ARTICLES | Permission.MODERATOR_COMMENTS, False)
            'Administor': (0xff, False)
    }
    for r in roles:
        role = Role.query.filter_by(name=r).first()
        if role is None:
            role = Role(name=r)
        role.permissions = roles[r][0]
        role.default = roles[r][1]
        db.session.add(role)
    db.session.commit()

赋予角色

app/models.py: 定义默认的用户角色

class User(UserMixin, db.Model):
    #..
    def __init__(self, **kwargs):
        super(User, self).__init__(**kwargs)
        if self.role is None: # 基类未定义role属性
            if self.email == current_app.config['FLASKY_ADMIN']
                self.role = Role.query.filter_by(permissions=0xff).first()
            if self.role is None:
                slef.role = Role.query.filter_by(default=True).first() #默认用户user

角色验证

app/models.py: 检查用户是否有指定权限

class User(UserMixin, db.model):
    #..
    def can(self, perssion):
        return self.role is not None and (self.perssions & perssion) == perssion
    def is_administrator(self):
        return self.can(Perssion.ADMINISTER)

class AnonymousUser(AnonymousUserMixin):
    def can(self, perssion):
        return False
    def is_administrator(self):
        return False

login_manager.anonymous_user = AnonymousUser
Flask是一种Python Web框架,而Element-UI则是一个Vue.js的UI库。它们在Web开发中起到不同的作用。 Flask作为一个轻量级的Web框架,适合用于快速开发小型的网站或应用。它提供了简洁的API和灵活的扩展机制,使开发者能够高效地构建出符合需求的Web应用。Flask采用了MVC(模型-视图-控制器)的设计模式,使代码的组织和维护变得更加容易。Flask还支持RESTful API的开发,使得我们可以基于HTTP协议来设计和实现各种资源的CRUD操作。总的来说,Flask是一个功能强大且易于学习和使用的Web框架,适用于中小规模的Web开发项目。 而Element-UI是一个基于Vue.js的组件库,它提供了丰富的UI组件,以及一些常用的工具函数,帮助开发者构建出美观且易用的前端界面。Element-UI中包含了各种常见的UI组件,例如按钮、表格、表单、弹窗等等,这些组件都经过了精心设计和开发,具有统一的样式和交互效果。Element-UI还提供了一些高级的功能,例如表单校验、数据加载、数据筛选等等,极大地提升了开发效率和用户体验。通过使用Element-UI,我们可以快速构建出具有一致性和美观性的用户界面,同时也提升了前端开发的效率。 综上所述,Flask和Element-UI在Web开发中扮演着不同的角色Flask作为后端框架负责处理数据的逻辑和业务逻辑,而Element-UI作为前端组件库则主要负责构建用户界面和提供友好的用户交互。通过Flask和Element-UI的结合,我们可以实现一个完整的Web应用,既具备了良好的设计和易用性,又具备了高效的开发和可拓展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值