9-----BBS論壇
阿新 • • 發佈:2018-11-26
9.1.許可權和角色模型定義
(1)cms/models
class CMSPermission(object): ALL_PERMISSION = 0b11111111 # 1.訪問者的許可權 VISITOR = 0b00000001 # 2.管理帖子的許可權 POSTER = 0b00000010 # 3.管理評論的許可權 COMMENTER = 0b00000100# 4.管理板塊的許可權 BOARDER = 0b00001000 # 5.管理前臺使用者的許可權 FRONTUSER = 0b00010000 # 6.管理後臺使用者的許可權 CMSUSER = 0b00100000 # 7.管理後臺管理員的許可權 ADMINER = 0b01000000 cms_role_user = db.Table( 'cms_role_user', db.Column('cms_role_id',db.Integer,db.ForeignKey('cms_role.id'),primary_key=True), db.Column('cms_user_id',db.Integer,db.ForeignKey('cms_user.id'),primary_key=True) ) class CMSRole(db.Model): __tablename__ = 'cms_role' id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String(50), nullable=False) desc = db.Column(db.String(200),nullable=True) create_time= db.Column(db.DateTime,default=datetime.now) permissions = db.Column(db.Integer,default=CMSPermission.VISITOR) users = db.relationship('CMSUser',secondary=cms_role_user,backref='roles')
生成到資料庫
python manage.py db migrate
python manage.py db upgrade
(2)manage.py
CMSRole = cms_models.CMSRole CMSPermission = cms_models.CMSPermission @manager.command def create_role(): # 1.訪問者(可以修改個人資訊) visitor = CMSRole(name='訪問者',desc='只能訪問資料,不能修改') visitor.permissions = CMSPermission.VISITOR # 2.運營人員(修改個人資訊,管理帖子,管理評論,管理前臺使用者) operator = CMSRole(name='運營',desc='管理帖子,管理評論,管理前臺使用者,') operator.permissions = CMSPermission.VISITOR|CMSPermission.POSTER\ |CMSPermission.COMMENTER|CMSPermission.FRONTUSER # 3.管理員(擁有所有許可權) admin = CMSRole(name='管理員',desc='擁有本系統所有許可權') admin.permissions = CMSPermission.VISITOR|CMSPermission.POSTER|CMSPermission.CMSUSER\ |CMSPermission.COMMENTER|CMSPermission.FRONTUSER|CMSPermission.BOARDER # 4.開發者 developer = CMSRole(name='開發者',desc='開發人員專用角色') developer.permissions = CMSPermission.ALL_PERMISSION db.session.add_all([visitor,operator,admin,developer]) db.session.commit()
建立角色
python manage.py create_role
9.2.封裝許可權判斷功能
(1)cms/models.py
class CMSUser(db.Model): #....... @property def permissions(self): #使用者擁有的許可權 if not self.roles: return 0 all_permissions = 0 #使用者所有的角色 for role in self.roles: #取出使用者所有角色的所有許可權 permissions = role.permissions #把所有許可權通過“|=”整合到all_permissions all_permissions |= permissions return all_permissions def has_permission(self,permission): # 判斷使用者是否有‘xxx’許可權 #通過與操作,判斷使用者是否有‘permission’;得到的結果相等返回true,不相等返回false return self.permissions&permission == permission @property def is_developer(self): #判斷是不是開發者 return self.has_permission(CMSPermission.ALL_PERMISSION)
(2)manage.py
@manager.option('-e','--email',dest='email') #使用者郵箱 @manager.option('-n','--name',dest='name') #角色名字 def add_user_to_role(email,name): '''新增使用者到某個角色''' user = CMSUser.query.filter_by(email=email).first() if user: role = CMSRole.query.filter_by(name=name).first() if role: #把使用者新增到角色裡面 role.users.append(user) db.session.commit() print("使用者新增到角色成功!") else: print("沒有這個角色:%s" %role) else: print("%s郵箱沒有這個使用者!"%email) @manager.command def test_permission(): '''測試使用者是否有xxx許可權''' user = CMSUser.query.first() if user.has_permission(CMSPermission.VISITOR): print("這個使用者有訪問者許可權") else: print("這個使用者沒有訪問者許可權")
(3)cms終端把使用者新增到角色
#新增使用者到角色 python manage.py add_user_to_role -e [email protected] -n 訪問者 #測試 python manage.py test_permission
- 9.1.許可權和角色模型定義
- 9.2.封裝許可權判斷功能
9.1.許可權和角色模型定義
(1)cms/models
class CMSPermission(object): ALL_PERMISSION = 0b11111111 # 1.訪問者的許可權 VISITOR = 0b00000001 # 2.管理帖子的許可權 POSTER = 0b00000010 # 3.管理評論的許可權 COMMENTER = 0b00000100 # 4.管理板塊的許可權 BOARDER = 0b00001000 # 5.管理前臺使用者的許可權 FRONTUSER = 0b00010000 # 6.管理後臺使用者的許可權 CMSUSER = 0b00100000 # 7.管理後臺管理員的許可權 ADMINER = 0b01000000 cms_role_user = db.Table( 'cms_role_user', db.Column('cms_role_id',db.Integer,db.ForeignKey('cms_role.id'),primary_key=True), db.Column('cms_user_id',db.Integer,db.ForeignKey('cms_user.id'),primary_key=True) ) class CMSRole(db.Model): __tablename__ = 'cms_role' id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String(50), nullable=False) desc = db.Column(db.String(200),nullable=True) create_time = db.Column(db.DateTime,default=datetime.now) permissions = db.Column(db.Integer,default=CMSPermission.VISITOR) users = db.relationship('CMSUser',secondary=cms_role_user,backref='roles')
生成到資料庫
python manage.py db migrate
python manage.py db upgrade
(2)manage.py
CMSRole = cms_models.CMSRole CMSPermission = cms_models.CMSPermission @manager.command def create_role(): # 1.訪問者(可以修改個人資訊) visitor = CMSRole(name='訪問者',desc='只能訪問資料,不能修改') visitor.permissions = CMSPermission.VISITOR # 2.運營人員(修改個人資訊,管理帖子,管理評論,管理前臺使用者) operator = CMSRole(name='運營',desc='管理帖子,管理評論,管理前臺使用者,') operator.permissions = CMSPermission.VISITOR|CMSPermission.POSTER\ |CMSPermission.COMMENTER|CMSPermission.FRONTUSER # 3.管理員(擁有所有許可權) admin = CMSRole(name='管理員',desc='擁有本系統所有許可權') admin.permissions = CMSPermission.VISITOR|CMSPermission.POSTER|CMSPermission.CMSUSER\ |CMSPermission.COMMENTER|CMSPermission.FRONTUSER|CMSPermission.BOARDER # 4.開發者 developer = CMSRole(name='開發者',desc='開發人員專用角色') developer.permissions = CMSPermission.ALL_PERMISSION db.session.add_all([visitor,operator,admin,developer]) db.session.commit()
建立角色
python manage.py create_role
9.2.封裝許可權判斷功能
(1)cms/models.py
class CMSUser(db.Model): #....... @property def permissions(self): #使用者擁有的許可權 if not self.roles: return 0 all_permissions = 0 #使用者所有的角色 for role in self.roles: #取出使用者所有角色的所有許可權 permissions = role.permissions #把所有許可權通過“|=”整合到all_permissions all_permissions |= permissions return all_permissions def has_permission(self,permission): # 判斷使用者是否有‘xxx’許可權 #通過與操作,判斷使用者是否有‘permission’;得到的結果相等返回true,不相等返回false return self.permissions&permission == permission @property def is_developer(self): #判斷是不是開發者 return self.has_permission(CMSPermission.ALL_PERMISSION)
(2)manage.py
@manager.option('-e','--email',dest='email') #使用者郵箱 @manager.option('-n','--name',dest='name') #角色名字 def add_user_to_role(email,name): '''新增使用者到某個角色''' user = CMSUser.query.filter_by(email=email).first() if user: role = CMSRole.query.filter_by(name=name).first() if role: #把使用者新增到角色裡面 role.users.append(user) db.session.commit() print("使用者新增到角色成功!") else: print("沒有這個角色:%s" %role) else: print("%s郵箱沒有這個使用者!"%email) @manager.command def test_permission(): '''測試使用者是否有xxx許可權''' user = CMSUser.query.first() if user.has_permission(CMSPermission.VISITOR): print("這個使用者有訪問者許可權") else: print("這個使用者沒有訪問者許可權")
(3)cms終端把使用者新增到角色
#新增使用者到角色 python manage.py add_user_to_role -e [email protected] -n 訪問者 #測試 python manage.py test_permission