权限已授予!!以下是我的AI DMS背后的配方🤞
这是Permit.io 授权挑战赛:AI 访问控制的参赛作品。
嗨,
欢迎回来!这是我参加 Permit.io 授权挑战赛的第二个作品。(如果您想看第一个作品,请点击此链接:https://dev.to/rohan_sharma/access-control-handled-heres-how-i-built-my-dms-212)
这个项目与上一个项目并无不同。它仍然是一个文档管理系统,但现在拥有更强大的功能和配置选项。
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;
}
管理员可以通过管理面板管理 AI 代理,定义它们的角色和功能。
2. 权限级别
该AIPermissionLevel枚举定义了人工智能代理可以拥有的不同访问级别:
export enum AIPermissionLevel {
NO_ACCESS = "no_access",
READ_ONLY = "read_only",
SUGGEST_ONLY = "suggest_only",
FULL_ACCESS = "full_access",
}
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;
}
4. 权限检查
该checkAIPermission函数检查人工智能代理是否具有执行操作的权限:
export function checkAIPermission(
agentId: string,
action: string,
resourceType: string,
resourceId?: string
): {
permitted: boolean;
requiresApproval: boolean;
permissionLevel: AIPermissionLevel;
} {
// Implementation details...
}
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...
}
与 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;
}
}
结论
本项目演示了如何使用 Permit.io 在 Next.js 应用中为用户和 AI 代理实现细粒度授权。通过将授权外部化,我们可以创建更安全、更易于维护且更灵活的应用,这些应用能够在安全地利用 AI 功能的同时,保持适当的控制。
请尝试在您的本地计算机上运行它,并告诉我反馈结果!
感谢您抽出时间阅读这篇博客。希望您喜欢。您的支持对我意义非凡。谢谢!❣️
文章来源:https://dev.to/rohan_sharma/access-granted-heres-the-recipe-behind-my-ai-dms-351b


