zoukankan      html  css  js  c++  java
  • 9-----BBS论坛

    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 = 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 1184405959@qq.com -n 访问者
    
    
    #测试
    python manage.py test_permission
    复制代码

  • 相关阅读:
    《构建之法》阅读笔记07
    学习进度条——第六周
    《构建之法》阅读笔记06
    团队开发
    《构建之法》阅读笔记05
    数组3——返回二维数组中最大联通子数组的和
    学习进度条——第五周
    坯布检验管控系统
    DateTime日期格式转换,不受系统格式的影响
    多层下firebird自增长字段的处理
  • 原文地址:https://www.cnblogs.com/edeny/p/10020923.html
Copyright © 2011-2022 走看看