Flask实现基于角色的访问控制(RBAC)-创新互联-成都快上网建站

Flask实现基于角色的访问控制(RBAC)-创新互联

Flask的核心在于”Micro”,因此它不像Django拥有很多功能,尤其是认证系统。因此使用Flask要自己写一个认证系统。下面就给大家分享一下简单的Flask实现RBAC。下面都是在models.py文件的代码

创新互联是一家专注于网站设计制作、成都网站制作与策划设计,荣昌网站建设哪家好?创新互联做网站,专注于网站建设十载,网设计领域的专业建站公司;建站业务涵盖:荣昌等地区。荣昌做网站价格咨询:18982081108

1、权限常量

class Permission:

   COMMENT = 0x02

ADMINISTER = 0x80

2、角色表

class Role(db.Model):

     __tablename__ = 'roles'

    id =db.Column(db.Integer,primary_key=True)

name =db.Column(db.String(255),unique=True)

default = db.Column(db.Boolean,default=False,index=True)

permissions = db.Column(db.Integer)

users = db.relationship('User',backref='role',lazy='dynamic')

def __repr__(self):

         return '' %self.name

将角色手动添加到数据库中,即耗时又容易出错,最便捷的又不容易出错的方法就是写一个静态方法。

class Role(db.Model):

……

@staticmethod

     def insert_roles():

         roles = {

             'User': (Permission.COMMENT,True),

             'Administrator': (0xff,False)

         }

         for ro in roles:

             role= Role.query.filter_by(name=ro).first()

             ifrole is None:

                 role = Role(name=ro)

             role.permissions = roles[ro][0]

             role.default = roles[ro][1]

             db.session.add(role)

         db.session.commit()

3、用户表

class User(UserMixin,db.Model):

   __tablename__ = 'users'

   id =db.Column(db.Integer,primary_key=True)

   username =db.Column(db.String(255),unique=True,index=True)

   passwd =db.Column(db.String(255))

   email =db.Column(db.String(255),unique=True,index=True)

   role_id = db.Column(db.Integer,db.ForeignKey('roles.id'))

   def __repr__(self):

        ''%self.username

4、赋予角色

   用户在注册时,会赋予适当的角色。用户注册时赋予的角色都是普通用户,这是默认角色。但管理员就比较列外了。管理员由设置的变量CMDB_ADMIN来识别,当注册的邮箱和设置的该变量的值一样就会自动设置为管理员。

Class User(UseMin,db.Model):

……

   def__init__(self,**kwargs):

      super(User,self).__init__(**kwargs)

       if self.role is None:

           if self.email ==current_app.config['CMDB_ADMIN']:

               self.role =Role.query.filter_by(permissions=0xff).first()

           if self.role ==None:

               self.role =Role.query.filter_by(default=True).first()

   def __repr__(self):

        ''%self.username

       到这里简单的基于角色的权限控制就完成了。接下来就是比较简单的角色认证了。由于是自学不久,有不足之处希望大家多多指点。

创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。


网页名称:Flask实现基于角色的访问控制(RBAC)-创新互联
标题网址:http://kswjz.com/article/dhpjps.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流