博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BBS论坛(九)
阅读量:6316 次
发布时间:2019-06-22

本文共 3620 字,大约阅读时间需要 12 分钟。

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.CMSRoleCMSPermission = cms_models.CMSPermission@manager.commanddef 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.commanddef 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

 

转载地址:http://xekaa.baihongyu.com/

你可能感兴趣的文章
阿里巴巴离职DBA 35岁总结的职业生涯
查看>>
LOT NUMBER / PO / RECEIPT NO Relation.
查看>>
Fedora9常用网络调试
查看>>
Matlab绘图方法汇总
查看>>
关于操作系统的进程调度问题
查看>>
POJ 1243 One Person
查看>>
Bash: about .bashrc, .bash_profile, .profile, /etc/profile, etc/bash.bashrc and others
查看>>
hibernate 映射实例 学生 课程 成绩
查看>>
【CAS单点登录视频教程】 第04集 -- tomcat下配置https环境
查看>>
自适应网页布局经验
查看>>
Ubuntu apache 禁止目录浏览
查看>>
常用脚本--归档ERRORLOG
查看>>
js网页倒计时精确到秒级
查看>>
常用CSS缩写语法总结
查看>>
TDD:什么是桩(stub)和模拟(mock)?
查看>>
C# 模拟POST提交文件
查看>>
PAT 解题报告 1004. Counting Leaves (30)
查看>>
Android开发之蓝牙 --修改本机蓝牙设备的可见性,并扫描周围可用的蓝牙设备
查看>>
[Head First设计模式]生活中学设计模式——外观模式
查看>>
Repository模式中,Update总是失败及其解析
查看>>