File size: 2,160 Bytes
05c5ed5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import { createAccessControl } from "better-auth/plugins/access";
import { defaultStatements } from "better-auth/plugins/admin/access";
import { PERMISSION_TYPES } from "app-types/permissions";

// Combine Better Auth's default statements with our app-specific permissions
const permissions = {
  // Use Better Auth's default statements for user and session management
  ...defaultStatements,
  // Add our app-specific resources
  workflow: [...Object.values(PERMISSION_TYPES)],
  agent: [...Object.values(PERMISSION_TYPES)],
  mcp: [...Object.values(PERMISSION_TYPES)],
  chat: [...Object.values(PERMISSION_TYPES)],
  temporaryChat: [...Object.values(PERMISSION_TYPES)],
};

// Create access control with all permissions
export const ac = createAccessControl(permissions);

// User role: restricted permissions
export const user = ac.newRole({
  // No user/session management permissions for regular users
  user: [],
  session: [],
  // Restricted app permissions
  workflow: ["view", "use", "list"],
  agent: ["view", "use", "list"],
  mcp: ["view", "use", "list"],
  chat: [...Object.values(PERMISSION_TYPES)],
  temporaryChat: [...Object.values(PERMISSION_TYPES)],
});

// Editor role: app permissions but no user management
export const editor = ac.newRole({
  // No user/session management permissions for editors
  user: [],
  session: [],
  // Full app permissions
  workflow: [...Object.values(PERMISSION_TYPES)],
  agent: [...Object.values(PERMISSION_TYPES)],
  mcp: ["create", "view", "update", "delete", "use", "list"],
  chat: [...Object.values(PERMISSION_TYPES)],
  temporaryChat: [...Object.values(PERMISSION_TYPES)],
});

// Admin role: full permissions including user management
export const admin = ac.newRole({
  // Full user and session management permissions from Better Auth defaults
  user: [...defaultStatements.user],
  session: [...defaultStatements.session],
  // Full app permissions
  workflow: [...Object.values(PERMISSION_TYPES)],
  agent: [...Object.values(PERMISSION_TYPES)],
  mcp: [...Object.values(PERMISSION_TYPES)],
  chat: [...Object.values(PERMISSION_TYPES)],
  temporaryChat: [...Object.values(PERMISSION_TYPES)],
});