您好,登錄后才能下訂單哦!
Flask的核心在于”Micro”,因此它不像Django擁有很多功能,尤其是認(rèn)證系統(tǒng)。因此使用Flask要自己寫一個(gè)認(rèn)證系統(tǒng)。下面就給大家分享一下簡單的Flask實(shí)現(xiàn)RBAC。下面都是在models.py文件的代碼
1、權(quán)限常量
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 '<Role%r>' %self.name
將角色手動(dòng)添加到數(shù)據(jù)庫中,即耗時(shí)又容易出錯(cuò),最便捷的又不容易出錯(cuò)的方法就是寫一個(gè)靜態(tài)方法。
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):
'<User %r>'%self.username
4、賦予角色
用戶在注冊時(shí),會(huì)賦予適當(dāng)?shù)慕巧?。用戶注冊時(shí)賦予的角色都是普通用戶,這是默認(rèn)角色。但管理員就比較列外了。管理員由設(shè)置的變量CMDB_ADMIN來識別,當(dāng)注冊的郵箱和設(shè)置的該變量的值一樣就會(huì)自動(dòng)設(shè)置為管理員。
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):
'<User %r>'%self.username
到這里簡單的基于角色的權(quán)限控制就完成了。接下來就是比較簡單的角色認(rèn)證了。由于是自學(xué)不久,有不足之處希望大家多多指點(diǎn)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。