前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >BBS论坛(九)

BBS论坛(九)

作者头像
zhang_derek
发布2019-02-13 16:03:59
9420
发布2019-02-13 16:03:59
举报
文章被收录于专栏:有趣的django有趣的django

9.1.权限和角色模型定义

(1)cms/models

代码语言:javascript
复制
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')

生成到数据库

代码语言:javascript
复制
python manage.py db migrate

python manage.py db upgrade

(2)manage.py

代码语言:javascript
复制
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()

创建角色

代码语言:javascript
复制
python manage.py create_role

9.2.封装权限判断功能

(1)cms/models.py

代码语言:javascript
复制
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

代码语言:javascript
复制
@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终端把用户添加到角色

代码语言:javascript
复制
#添加用户到角色
python manage.py add_user_to_role -e 1184405959@qq.com -n 访问者


#测试
python manage.py test_permission
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-06-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 9.1.权限和角色模型定义
  • 9.2.封装权限判断功能
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档