104 lines
3.7 KiB
Python
104 lines
3.7 KiB
Python
from app import create_app
|
|
from app.models.database import db
|
|
from app.models.user import Role
|
|
from app.models.permission import Permission
|
|
import logging
|
|
|
|
logging.basicConfig(level=logging.INFO)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def init_permissions():
|
|
"""初始化系统权限"""
|
|
logger.info("开始初始化系统权限...")
|
|
|
|
# 只定义管理类权限,对应现有的 @admin_required 装饰的路由
|
|
permissions = [
|
|
# 公告管理权限
|
|
{'code': 'manage_announcements', 'name': '公告管理', 'description': '允许管理系统公告(发布、编辑、删除、置顶等)'},
|
|
|
|
# 图书管理权限
|
|
{'code': 'manage_books', 'name': '图书管理', 'description': '允许管理图书(添加、编辑、删除图书)'},
|
|
{'code': 'manage_categories', 'name': '分类管理', 'description': '允许管理图书分类'},
|
|
{'code': 'import_export_books', 'name': '导入导出图书', 'description': '允许批量导入和导出图书数据'},
|
|
|
|
# 借阅管理权限
|
|
{'code': 'manage_borrows', 'name': '借阅管理', 'description': '允许管理全系统借阅记录和处理借还书操作'},
|
|
{'code': 'manage_overdue', 'name': '逾期管理', 'description': '允许查看和处理逾期借阅'},
|
|
|
|
# 库存管理权限
|
|
{'code': 'manage_inventory', 'name': '库存管理', 'description': '允许查看和调整图书库存'},
|
|
|
|
# 日志权限
|
|
{'code': 'view_logs', 'name': '查看日志', 'description': '允许查看系统操作日志'},
|
|
|
|
# 统计权限
|
|
{'code': 'view_statistics', 'name': '查看统计', 'description': '允许查看统计分析数据'},
|
|
|
|
# 用户管理权限
|
|
{'code': 'manage_users', 'name': '用户管理', 'description': '允许管理用户(添加、编辑、禁用、删除用户)'},
|
|
{'code': 'manage_roles', 'name': '角色管理', 'description': '允许管理角色和权限'},
|
|
]
|
|
|
|
# 添加权限记录
|
|
added_count = 0
|
|
updated_count = 0
|
|
|
|
for perm_data in permissions:
|
|
# 检查权限是否已存在
|
|
existing_perm = Permission.query.filter_by(code=perm_data['code']).first()
|
|
|
|
if existing_perm:
|
|
# 更新现有权限信息
|
|
existing_perm.name = perm_data['name']
|
|
existing_perm.description = perm_data['description']
|
|
updated_count += 1
|
|
else:
|
|
# 创建新权限
|
|
permission = Permission(**perm_data)
|
|
db.session.add(permission)
|
|
added_count += 1
|
|
|
|
# 提交所有权限
|
|
db.session.commit()
|
|
logger.info(f"权限初始化完成: 新增 {added_count} 个, 更新 {updated_count} 个")
|
|
|
|
# 处理角色权限分配
|
|
assign_role_permissions()
|
|
|
|
|
|
def assign_role_permissions():
|
|
"""为系统默认角色分配权限"""
|
|
logger.info("开始分配角色权限...")
|
|
|
|
# 获取所有权限
|
|
all_permissions = Permission.query.all()
|
|
|
|
# 获取系统内置角色
|
|
admin_role = Role.query.get(1) # 管理员角色
|
|
user_role = Role.query.get(2) # 普通用户角色
|
|
|
|
if admin_role and user_role:
|
|
# 管理员拥有所有权限
|
|
admin_role.permissions = all_permissions
|
|
|
|
# 普通用户无需特殊管理权限
|
|
user_role.permissions = []
|
|
|
|
db.session.commit()
|
|
logger.info(f"管理员角色分配了 {len(all_permissions)} 个权限")
|
|
logger.info(f"普通用户角色无管理权限")
|
|
else:
|
|
logger.error("无法找到内置角色,请确保角色表已正确初始化")
|
|
|
|
|
|
def main():
|
|
"""主函数"""
|
|
app = create_app()
|
|
with app.app_context():
|
|
init_permissions()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|