/**
 * 操作日志权限检查中间件
 * @file operationLogAuth.js
 * @description 检查用户是否有操作日志访问权限
 */
const { User, Role, Permission } = require('../models');

/**
 * 检查操作日志权限的中间件
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 * @param {Function} next - 下一步函数
 */
const checkOperationLogPermission = async (req, res, next) => {
  try {
    const userId = req.user.id;
    
    // 查询用户及其角色和权限
    const user = await User.findByPk(userId, {
      include: [{
        model: Role,
        as: 'role',
        include: [{
          model: Permission,
          as: 'permissions',
          through: { attributes: [] },
          attributes: ['permission_key']
        }]
      }]
    });

    if (!user || !user.role) {
      return res.status(403).json({
        success: false,
        message: '用户角色信息不存在'
      });
    }

    // 获取用户权限列表
    const userPermissions = user.role.permissions 
      ? user.role.permissions.map(p => p.permission_key)
      : [];

    // 检查是否有操作日志查看权限
    if (!userPermissions.includes('operation_log:view')) {
      return res.status(403).json({
        success: false,
        message: '权限不足，无法访问操作日志'
      });
    }

    // 将权限信息添加到请求对象中
    req.user.permissions = userPermissions;
    next();
  } catch (error) {
    console.error('操作日志权限检查失败:', error);
    return res.status(500).json({
      success: false,
      message: '权限检查失败'
    });
  }
};

module.exports = {
  checkOperationLogPermission
};
