效果图
这一章节完成后的效果如下:
- 1.普通用户
- 2.管理者
用户角色
- 1.在个人博客系统中用户分为4种分立角色,分别为管理员、协管员、普通用户和匿名用户,每种用户有不同的权限,下面在数据库中建立用户这张表。
class Role(db.Model):
__tablename__ = 'roles'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String, nullable=True, unique=True)
default = db.Column(db.Boolean, default=False)
permissions = db.Column(db.Integer)
users = db.relationship('User', backref='itsrole')
只有普通用户的default字段为True,其它都默认为False。permissions字段是个整数,表示位操作,各操作都对应一个位位置,如果能执行某项操作的角色,其位被设为1。permissions各个权限位的表示如下:
* FOLLOW = 0x01
关注用户
* COMMENT = 0x02
在他人文章中发表评论
* WRITE_ARTICLES=0x04
写文章
* MODERATE_COMMENTS=0x08
管理他人评论
* ADMINISTER=0x80
管理员
- 2.下表列出了4种用户角色以及用户角色的权限,如果想要添加另外的角色,只需要使用不同的权限进行组合。在个人博客系统中用户分为4种分立角色,分别为管理员、协管员、普通用户和匿名用户,每种用户有不同的权限。
角色 | 权限 | 说明 |
---|---|---|
匿名 | 0b00000000(0x00) | 未登陆的用户,只有阅读权限 |
普通用户 | 0b00000111(0x07) | 发布文章、发表评论、关注其它用户 |
协管员 | 0b00001111(0x0f) | 增加审查不当评论的权限 |
管理员 | 0b11111111(0xff) | 拥有所有权限 |
- 3.下面在app/models.py文件中创建一个静态方法函数,一次性插入所有角色,代码如下:
@staticmethod
def insert_roles():
roles = {
'User':(Permission.FOLLOW|Permission.COMMENT|
Permission.WRITE_ARTICLES, True), # 只有普通用户的default为True
'Moderare':(Permission.FOLLOW|Permission.COMMENT|
Permission.WRITE_ARTICLES|Permission.MODERATE_COMMENTS, False),
'Administrator':(0xff, False)
}
for r in roles:
role = Role.query.filter_by(name=r).first()
if role is None:
role = Role(name=r)
role.permissions = roles[r][0]
r