发布于 2026-01-06 0 阅读
0

权限已授予!!以下是我的AI DMS背后的配方🤞

权限已授予!!以下是我的AI DMS背后的配方🤞

这是Permit.io 授权挑战赛:AI 访问控制的参赛作品。

 

嗨,
欢迎回来!这是我参加 Permit.io 授权挑战赛的第二个作品。(如果您想看第一个作品,请点击此链接:https://dev.to/rohan_sharma/access-control-handled-heres-how-i-built-my-dms-212

这个项目与上一个项目并无不同。它仍然是一个文档管理系统,但现在拥有更强大的功能和配置选项。

欢迎使用Radhika 的 AI 文档管理器
标识

Radhika 的 AI DocManager仍然是一款文档管理系统 (DMS),但现在它融合了 AI 的强大功能、全新的设置和配置、现代化的用户界面(最佳深色模式)以及强大的特性。立即在您的本地计算机上测试吧!👾

本项目演示了如何使用 Permit.io 在 Next.js 应用程序中实现用户和 AI 代理的细粒度授权。这是一个文档管理系统,用户可以根据其角色和文档所有权创建、查看、编辑和删除文档,而 AI 代理可以根据其分配的权限协助进行文档管理。

特征

1️⃣ 用户授权

  • 基于角色的访问控制 (RBAC):不同角色(管理员、编辑者、查看者)拥有不同的权限。
  • 基于属性的访问控制(ABAC):文档所有者拥有特殊权限
  • 细粒度授权:使用 Permit.io 实现复杂的授权规则

2️⃣ AI授权

  • AI代理角色:定义具有特定能力的不同AI代理角色
  • 权限级别:配置人工智能代理可以访问和修改的内容
    • 无访问权限:AI代理完全无法访问该资源。
    • 只读:AI代理只能读取资源,不能修改资源。
    • 仅供参考:人工智能可以提出需要人工批准的更改建议。
    • 完全访问权限:人工智能拥有读取和修改资源的完全权限。
  • 审批流程:敏感的人工智能操作需要人工审批。
  • 审计与监控:追踪所有人工智能操作和审批过程

3️⃣ 文档智能

  • 文档分析:利用人工智能技术分析文档内容和结构
  • 文档摘要:生成文档的简洁摘要
  • 内容改进:AI 提供的文档内容改进建议

 

演示

项目仓库

GitHub 代码库:https://github.com/RS-labhub/AI-DocManager

文档:https://rs-labhub.github.io/AI-DocManager/

 

我的旅程

正如上一篇博客中所说,创建文档管理系统(DMS)非常困难,因为这背后有很多需要集思广益的想法。

总之,感谢Permit.io帮我节省了大量创建策略的时间。它简单易用,足以让我告别以前那种写代码写到崩溃的旧方法。

我使用 Permit.io 实现了以下功能:

  • 基于角色的访问控制(RBAC)
  • 基于属性的访问控制(ABAC)

此外,我还实现了AI应扮演的角色。这里同时使用了基于角色的访问控制(RBAC)和基于属性的访问控制(ABAC)。我使用了GROQ Cloud来实现快速的LLM推理和OpenAI兼容性。

总的来说,完成这个项目是一次很有趣的经历,我很享受这个过程。

如果您想查看 Permit.io 的完整实现,请阅读项目Readme文件!

 

使用 Permit.io 进行 AI 应用授权

着陆页

授权模型

用户授权

该应用程序实现了以下用户授权模型:

  • 管理员:可以创建、查看、编辑和删除任何文档,并访问管理面板。
  • 编辑者:可以创建、查看和编辑文档,但只能删除自己的文档。
  • 查看器:仅可查看文档

此外,无论角色如何,文档所有者都对其自己的文档拥有完全控制权。

人工智能授权

人工智能授权

该应用程序实现了以下AI授权模型:

  • AI代理角色

    • 助理:协助整理文件和处理基本任务
    • 编辑:能够编辑和改进文档内容
    • 分析器:分析文档内容并提供分析结果
  • 人工智能能力

    • read_documents:读取文档内容的功能
    • suggest_edits:能够对文档提出修改建议。
    • 编辑文档:直接编辑文档的功能
    • 创建文档:创建新文档的功能
    • delete_documents:删除文档的功能
    • analyze_content:分析文档内容的功能
    • summarize_content:文档摘要功能
    • translate_content:翻译文档的功能
    • generate_content:生成新内容的功能
  • 权限级别

    • NO_ACCESS:AI代理完全无法访问该资源。
    • 只读:AI代理只能读取资源,不能修改资源。
    • 仅供参考:人工智能可以提出需要人工批准的更改建议。
    • 完全访问权限:人工智能拥有读取和修改资源的完全权限

 

实施细节

人工智能授权实施

该应用程序通过以下几个关键组件实现人工智能授权:

1. AI代理管理

界面AIAgent定义了人工智能代理的结构:

export interface AIAgent {
  id: string;
  name: string;
  description: string;
  role: AIAgentRole;
  capabilities: AICapability[];
  createdBy: string;
  createdAt: string;
  updatedAt: string;
  isActive: boolean;
}
Enter fullscreen mode Exit fullscreen mode

管理员可以通过管理面板管理 AI 代理,定义它们的角色和功能。

2. 权限级别

AIPermissionLevel枚举定义了人工智能代理可以拥有的不同访问级别:

export enum AIPermissionLevel {
  NO_ACCESS = "no_access",
  READ_ONLY = "read_only",
  SUGGEST_ONLY = "suggest_only",
  FULL_ACCESS = "full_access",
}
Enter fullscreen mode Exit fullscreen mode
3. 人工智能行动

AIAction界面定义了人工智能代理可以执行的操作结构:

export interface AIAction {
  id: string;
  agentId: string;
  actionType: string;
  resourceType: string;
  resourceId: string;
  status: AIActionStatus;
  requestedAt: string;
  completedAt?: string;
  requestedBy: string;
  approvedBy?: string;
  rejectedBy?: string;
  metadata: Record<string, any>;
  result?: any;
}
Enter fullscreen mode Exit fullscreen mode
4. 权限检查

checkAIPermission函数检查人工智能代理是否具有执行操作的权限:

export function checkAIPermission(
  agentId: string,
  action: string,
  resourceType: string,
  resourceId?: string
): {
  permitted: boolean;
  requiresApproval: boolean;
  permissionLevel: AIPermissionLevel;
} {
  // Implementation details...
}
Enter fullscreen mode Exit fullscreen mode
5. 审批工作流程

该应用程序针对需要人工监督的AI操作实施了审批工作流程:

export async function requestAIAction(
  agentId: string,
  actionType: string,
  resourceType: string,
  resourceId: string,
  documentTitle: string,
  documentContent: string,
  metadata: Record<string, any>
): Promise<{ success: boolean; action?: AIAction; message?: string }> {
  // Implementation details...
}

export async function approveAIAction(
  actionId: string,
  userId: string
): Promise<{ success: boolean; action?: AIAction; message?: string }> {
  // Implementation details...
}

export async function rejectAIAction(
  actionId: string,
  userId: string,
  reason?: string
): Promise<{ success: boolean; action?: AIAction; message?: string }> {
  // Implementation details...
}
Enter fullscreen mode Exit fullscreen mode

与 Permit.io 集成

该应用程序通过permit.ts文件与 Permit.io 集成,该文件提供了用于检查权限的功能:

import { Permit } from 'permitio';

// Initialize Permit SDK
const permit = new Permit({
  pdp: process.env.PERMIT_PDP_URL,
  token: process.env.PERMIT_SDK_TOKEN,
});

// Check if a user can perform an action on a resource
export async function checkPermission(
  userId: string,
  action: string,
  resourceType: string,
  resourceAttributes: Record<string, any> = {}
): Promise<boolean> {
  try {
    const permitted = await permit.check(userId, action, {
      type: resourceType,
      ...resourceAttributes,
    });
    return permitted;
  } catch (error) {
    console.error('Permission check failed:', error);
    return false;
  }
}
Enter fullscreen mode Exit fullscreen mode

 

结论

本项目演示了如何使用 Permit.io 在 Next.js 应用中为用户和 AI 代理实现细粒度授权。通过将授权外部化,我们可以创建更安全、更易于维护且更灵活的应用,这些应用能够在安全地利用 AI 功能的同时,保持适当的控制。

请尝试在您的本地计算机上运行它,并告诉我反馈结果!

感谢您抽出时间阅读这篇博客。希望您喜欢。您的支持对我意义非凡。谢谢!❣️

文章来源:https://dev.to/rohan_sharma/access-granted-heres-the-recipe-behind-my-ai-dms-351b