钉钉 AI 客服:企业级权限设计

1 阅读1分钟

钉钉 AI 客服:企业级权限设计

权限系统是企业应用的基础。


一、权限模型

模型说明
RBAC基于角色
ABAC基于属性
ACL访问控制列表

二、RBAC 设计

2.1 角色定义

const ROLES = {
  admin: {
    name: '管理员',
    permissions: ['*']
  },
  manager: {
    name: '经理',
    permissions: ['view', 'edit', 'export']
  },
  agent: {
    name: '客服',
    permissions: ['view', 'chat']
  },
  viewer: {
    name: '访客',
    permissions: ['view']
  }
};

2.2 权限检查

function hasPermission(user, permission) {
  const role = ROLES[user.role];
  if (!role) return false;
  
  // 管理员拥有所有权限
  if (role.permissions.includes('*')) return true;
  
  return role.permissions.includes(permission);
}

// 使用
if (!hasPermission(req.user, 'edit')) {
  return res.status(403).json({ error: '权限不足' });
}

三、数据权限

3.1 数据隔离

async function getChats(user) {
  if (user.role === 'admin') {
    return db.query('SELECT * FROM chats');
  }
  
  if (user.role === 'agent') {
    return db.query('SELECT * FROM chats WHERE agent_id = ?', [user.id]);
  }
  
  return [];
}

3.2 部门权限

async function getDepartmentChats(user) {
  if (user.role === 'admin') {
    return db.query('SELECT * FROM chats');
  }
  
  return db.query(`
    SELECT c.* FROM chats c
    JOIN users u ON c.agent_id = u.id
    WHERE u.department_id = ?
  `, [user.departmentId]);
}

四、操作审计

async function audit(userId, action, resource, details) {
  await db.insert('audit_logs', {
    user_id: userId,
    action,
    resource,
    details: JSON.stringify(details),
    ip: getClientIp(),
    timestamp: Date.now()
  });
}

// 使用
await audit(req.user.id, 'DELETE', 'faq', { faqId: id });

五、权限管理 API

5.1 分配角色

app.post('/api/users/:id/role', async (req, res) => {
  if (!hasPermission(req.user, 'assign_role')) {
    return res.status(403).json({ error: '权限不足' });
  }
  
  await db.update('users', { id: req.params.id, role: req.body.role });
  await audit(req.user.id, 'ASSIGN_ROLE', 'user', { userId: req.params.id, role: req.body.role });
  
  res.json({ success: true });
});

六、安全最佳实践

  • 最小权限原则
  • 定期审查权限
  • 敏感操作二次确认
  • 完整审计日志

项目地址:GitHub - dingtalk-connector-pro 有问题欢迎 Issue 或评论区交流