BBS论坛(九)
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 = 0b01000000cms_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 migratepython 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_PERMISSIONdb.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):#....... @propertydef permissions(self):#用户拥有的权限if not self.roles:return 0all_permissions = 0#用户所有的角色for role in self.roles:#取出用户所有角色的所有权限permissions = role.permissions#把所有权限通过“|=”整合到all_permissionsall_permissions |= permissionsreturn all_permissionsdef has_permission(self,permission):# 判断用户是否有‘xxx’权限#通过与操作,判断用户是否有‘permission’;得到的结果相等返回true,不相等返回falsereturn self.permissions&permission == permission@propertydef 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 1184405959@qq.com -n 访问者#测试 python manage.py test_permission

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
