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