1. 程式人生 > >9-----BBS論壇

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 [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
複製程式碼