models.pyfrom exts import db
from datetime import datetime
from werkzeug.security import generate_password_hash, check_password_hash
class CMSPersmission(object):
ALL_PERMISSION = 0b11111111
VISITOR = 0b00000001
POSTER = 0b00000010
COMMENTER = 0b00000100
BOARDER = 0b00001000
FRONTUSER = 0b00010000
CMSUSER = 0b00100000
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=CMSPersmission.VISITOR)
users = db.relationship("CMSUser", secondary=cms_role_user, backref="roles")
class CMSUser(db.Model):
__tablename__ = "cms_user"
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String(50), nullable=False)
_password = db.Column(db.String(100), nullable=False)
email = db.Column(db.String(50), nullable=False, unique=True)
join_time = db.Column(db.DateTime, default=datetime.now)
def __init__(self, username, password, email):
self.username = username
self.password = password
self.email = email
@property
def password(self):
return self._password
@password.setter
def password(self, raw_password):
self._password = generate_password_hash(raw_password)
def check_password(self, raw_password):
result = check_password_hash(self.password, raw_password)
return result
manage.pyfrom flask_script import Manager
from flask_migrate import MigrateCommand, Migrate
from zlbbs import create_app
from exts import db
from apps.cms import models as cms_models
CMSUser = cms_models.CMSUser
CMSRole = cms_models.CMSRole
CMSPersmission = cms_models.CMSPersmission
app = create_app()
manager = Manager(app)
Migrate(app, db)
manager.add_command("db", MigrateCommand)
@manager.option("-u", "--username", dest="username")
@manager.option("-p", "--password", dest="password")
@manager.option("-e", "--email", dest="email")
def create_cms_user(username, password, email):
"""创建管理员用户"""
user = CMSUser(username=username, password=password, email=email)
db.session.add(user)
try:
db.session.commit()
print("cms 用户添加成功")
except Exception as e:
print(e)
db.session.rollback()
print("cms 用户添加失败")
@manager.command
def create_role():
visitor = CMSRole(name="访问者", desc="只能相关数据, 不能修改.")
visitor.permissions = CMSPersmission.VISITOR
operator = CMSRole(name="运营", desc="管理帖子, 管理评论, 管理里前台用户, 管理后台用户权限.")
operator.permissions = CMSPersmission.VISITOR | CMSPersmission.POSTER | \
CMSPersmission.COMMENTER | CMSPersmission.FRONTUSER | \
CMSPersmission.CMSUSER
admin = CMSRole(name="管理员", desc="拥有本系统所有权限.")
admin.permissions = CMSPersmission.VISITOR | CMSPersmission.POSTER | \
CMSPersmission.CMSUSER | CMSPersmission.COMMENTER | \
CMSPersmission.FRONTUSER | CMSPersmission.BOARDER
developer = CMSRole(name="开发者", desc="开发人员专用角色.")
developer.permissions = CMSPersmission.ADMINER
db.session.add_all([visitor, operator, admin, developer])
try:
db.session.commit()
print("添加成功")
except Exception as e:
db.session.rollback()
print("添加失败")
if __name__ == "__main__":
manager.run()