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

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

 

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.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

 

9.1.权限和角色模型定义
9.2.封装权限判断功能

转载于:https://www.cnblogs.com/edeny/p/10020923.html

你可能感兴趣的文章
LCA的两种求法
查看>>
Python排序算法(四)——插入排序
查看>>
oo第三单元博客作业
查看>>
Jquery---定时器(实现页面内定时弹出广告,定时退出)
查看>>
day11-闭包函数和装饰器
查看>>
VSCode常用快捷键与流行插件
查看>>
从程序员到项目经理(14):项目经理必须懂一点“章法”【转载】
查看>>
JDBC批量插入优化addbatch
查看>>
复现一篇深度强化学习论文之前请先看了这篇文章!
查看>>
git 命令使用常见问题
查看>>
android加固系列—6.仿爱加密等第三方加固平台之动态加载dex防止apk被反编译
查看>>
decltype
查看>>
抽象类
查看>>
C++面向对象基础知识
查看>>
PY----Python
查看>>
[转载]识别真假搜索引擎(搜索蜘蛛)方法
查看>>
如何查看linux服务器内存使用情况
查看>>
Charles 3断点篡改数据
查看>>
虚拟机安装iOS开发环境流水帐,附iOS Developer Program流水帐
查看>>
[HNOI2010]CITY 城市建设
查看>>