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()