Flask 用户权限控制问题

对于web程序用户权限是经常用到的基础性功能。具体来说,不同权限用户对web程序操作范围不同,比如程序里最高权限可以进行建库、删库等高等级操作,最低权限用户只能查看程序部分web界面内容,和限制性的编辑功能。高权限等级用户需要登陆系统才能进行对应权限操作,而对于最低权限等级的游客可以不登陆查看部分web界面。

这里我们主要用Flask-security来实现用户权限问题。

@login_required
def post():
    pass

注意:To enable this, if the application configuration variable LOGIN_DISABLEDis set toTrue, this decorator will be ignored.

进一步可以直接用roles_required装饰器限定哪个权限等级可以访问被装饰函数:

@app.route('/dashboard')
@roles_required('admin', 'editor')
def dashboard():
    return 'Dashboard'

注意必须同时满足'admin'和 'editor'权限。

相应的roles_accepted装饰器中,只要满足其中一个权限即可访问被装饰函数create_post():

@app.route('/create_post')
@roles_accepted('editor', 'author')
def create_post():
    return 'Create Post'

以上功能建立在User-Role 数据库模型之上,User和Role至少包含以下几个Fields:

User

  • id
  • email
  • password
  • active

Role

  • id
  • name
  • description

以上Fields是最小模型,可以进行扩展,但不能再进行删减。想改动最小模型,只能手打一个模块了,这里不讨论了。

如开源软件https://gitee.com/beipingOS/deshu-wms中,roles_users模型,和roles和users定义如下:

roles_users = db.Table(
 'roles_users',
 db.Column('user_id', db.Integer(), db.ForeignKey('user.id')),
 db.Column('role_id', db.Integer(), db.ForeignKey('role.id'))
)


class Role(db.Model, RoleMixin):
 id = db.Column(db.Integer(), primary_key=True)
 name = db.Column(db.String(80), unique=True)
 description = db.Column(db.String(255))

 def __str__(self):
 return self.name


class User(db.Model, UserMixin):
 
 id = db.Column(db.Integer, primary_key=True)
 first_name = db.Column(db.String(255), nullable=False)
 last_name = db.Column(db.String(255))
 email = db.Column(db.String(255), unique=True, nullable=False)
 password = db.Column(db.String(255), nullable=False)
 active = db.Column(db.Boolean())
 confirmed_at = db.Column(db.DateTime())
 roles = db.relationship('Role', secondary=roles_users,
 backref=db.backref('users', lazy='dynamic'))

 def __str__(self):
 return self.email

代码比较简单,可以直接用到其他的web程序中。Roles可以按自己程序设计的需要去定义。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值