rbac-permissions-builder — скилл для Claude Code: как установить
Проектирует ролевую модель доступа на TypeScript: от матрицы прав и Express middleware до классов политик и проверок в интерфейсе. Пригодится при настройке авторизации в API.
npx skills add patricio0312rev/skills --skill rbac-permissions-builder -a claude-codeЧто делает rbac-permissions-builder
Скилл создаёт готовую структуру контроля доступа на основе ролей (RBAC). В её основе лежит перечисление прав вида resource:action и таблица сопоставления с ролями. Для бэкенда шаблон генерирует Express middleware requirePermission, возвращающий статус 401 или 403, и функцию requireOwnership для разделения прав владельца объекта и администратора.
Сложные правила выносятся в классы политик с изолированными статическими методами. Для клиентской части скилл предлагает эндпоинт /api/me со списком разрешений и фронтенд-хелпер usePermission для скрытия кнопок в интерфейсе.
Шаблон ориентирован на TypeScript и Express. Если в вашем проекте нет промежуточного слоя аутентификации, заполняющего req.user, сгенерированные гарды сразу заблокируют запросы с ошибкой 401.
Какие задачи решает
- связать роли пользователей с гранулярными правами доступа
- закрыть эндпоинты Express с помощью route guards
- разграничить действия владельца записи и администратора
- скрыть недоступные кнопки в интерфейсе по правам пользователя
Примеры запросов агенту
- Спроектируй систему RBAC для сервиса с ролями пользователя, модератора и админа
- Напиши Express middleware для проверки прав на удаление пользователя
- Создай класс политики UserPolicy для правил редактирования профиля
Как установить rbac-permissions-builder
1Через Skills CLI (Vercel)
npx skills add patricio0312rev/skills --skill rbac-permissions-builder -a claude-code2Вручную: положить файлы
~/.claude/skills/rbac-permissions-builder/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/rbac-permissions-builder/
1Через Skills CLI (Vercel)
npx skills add patricio0312rev/skills --skill rbac-permissions-builder -a codex2Вручную: положить файлы
.agents/skills/rbac-permissions-builder/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add patricio0312rev/skills --skill rbac-permissions-builder -a cursor2Вручную: положить файлы
.cursor/skills/rbac-permissions-builder/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install patricio0312rev/skills rbac-permissions-builder2Вручную: положить файлы
.github/skills/rbac-permissions-builder/SKILL.md1Через Skills CLI (Vercel)
npx skills add patricio0312rev/skills --skill rbac-permissions-builder -a gemini-cli2Командой платформы
gemini skills install https://github.com/patricio0312rev/skills --path backend/rbac-permissions-builderВручную: положить файлы
.devin/skills/rbac-permissions-builder/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add patricio0312rev/skills --skill rbac-permissions-builder -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о rbac-permissions-builder
Как установить rbac-permissions-builder в Claude Code?
Выполните команду npx skills add patricio0312rev/skills --skill rbac-permissions-builder -a claude-code. Файл скилла сохранится по пути ~/.claude/skills/rbac-permissions-builder/SKILL.md.
Что делает скилл rbac-permissions-builder?
Он направляет агента при разработке авторизации: создаёт перечисления разрешений, связку ролей, middleware для роутов, классы политик и вспомогательные функции для UI.
Какие требования нужны для работы сгенерированного кода?
Код рассчитан на TypeScript и веб-фреймворк Express. Для работы мидлваров требуется предварительная аутентификация, которая записывает объект текущего пользователя в req.user.
Исходный текст
SKILL.md · MIT
---
name: rbac-permissions-builder
description: Implements role-based access control with permission matrix, route guards, policy functions, and UI permission hints. Provides middleware/guards, helper utilities, test suggestions, and permission checking patterns. Use when building "RBAC", "permissions", "access control", or "authorization".
---
# RBAC/Permissions Builder
Implement flexible role-based access control systems.
## Permission Matrix
```typescript
// Define permissions
export enum Permission {
USER_READ = "user:read",
USER_WRITE = "user:write",
USER_DELETE = "user:delete",
POST_READ = "post:read",
POST_WRITE = "post:write",
ADMIN_ACCESS = "admin:access",
}
// Define roles
export const ROLE_PERMISSIONS = {
user: [Permission.USER_READ, Permission.POST_READ, Permission.POST_WRITE],
moderator: [...userPermissions, Permission.POST_DELETE],
admin: Object.values(Permission), // All permissions
};
// Check permission
export const hasPermission = (user: User, permission: Permission): boolean => {
return ROLE_PERMISSIONS[user.role]?.includes(permission) ?? false;
};
```
## Route Guards (Express)
```typescript
export const requirePermission = (...permissions: Permission[]) => {
return (req: Request, res: Response, next: NextFunction) => {
if (!req.user) {
return res.status(401).json({ error: "Unauthorized" });
}
const hasAllPermissions = permissions.every((p) =>
hasPermission(req.user, p)
);
if (!hasAllPermissions) {
return res.status(403).json({ error: "Forbidden" });
}
next();
};
};
// Usage
router.delete(
"/users/:id",
authenticate,
requirePermission(Permission.USER_DELETE),
controller.delete
);
```
## Policy Pattern
```typescript
// policies/user.policy.ts
export class UserPolicy {
static canUpdate(currentUser: User, targetUser: User): boolean {
// Users can update themselves
if (currentUser.id === targetUser.id) return true;
// Admins can update anyone
if (hasPermission(currentUser, Permission.USER_WRITE)) return true;
return false;
}
static canDelete(currentUser: User, targetUser: User): boolean {
// Can't delete yourself
if (currentUser.id === targetUser.id) return false;
// Only admins can delete
return hasPermission(currentUser, Permission.USER_DELETE);
}
}
// Usage in controller
if (!UserPolicy.canUpdate(req.user, targetUser)) {
return res.status(403).json({ error: "Cannot update this user" });
}
```
## Resource Ownership
```typescript
export const requireOwnership = (
getResourceUserId: (req: Request) => Promise<string>
) => {
return async (req: Request, res: Response, next: NextFunction) => {
const resourceUserId = await getResourceUserId(req);
// Owner can access
if (req.user.id === resourceUserId) {
return next();
}
// Admin can access anything
if (hasPermission(req.user, Permission.ADMIN_ACCESS)) {
return next();
}
return res.status(403).json({ error: "Forbidden" });
};
};
```
## UI Permission Hints
```typescript
// Return permissions with user
GET /api/me
{
"user": { ... },
"permissions": ["user:read", "post:write"]
}
// Frontend helper
export const usePermission = (permission: Permission): boolean => {
const { user } = useAuth();
return user?.permissions?.includes(permission) ?? false;
};
// Usage
{usePermission('user:delete') && <DeleteButton />}
```
## Best Practices
- Define permissions granularly (resource:action)
- Check at multiple layers (route, controller, UI)
- Use policies for complex rules
- Cache permission checks
- Log permission denials
- Test all permission paths
## Output Checklist
- [ ] Permission enum/constants
- [ ] Role-to-permission mapping
- [ ] Route guard middleware
- [ ] Policy classes for complex rules
- [ ] Ownership checking utilities
- [ ] Permission checking helpers
- [ ] UI permission hints endpoint
- [ ] Test cases for all permission paths
© patricio0312rev · MIT · patricio0312rev/skills