1. Общие сущности
1) Permissions (атомарные права)
2) Roles (наборы прав)
3) Groups (команды, отделы, категории)
4) Users (пользователи)
2. На основе Базы данных
Основные сущности(core entities)
Связывающие таблицы “junction tables / associative tables”
ER-диаграмма
3. Resource based permissions
3.1 BE: запрещаем доступ к ресурсу
3.2 FE: защита маршрутов (Router Guard)
3.3 FE: UI уровень (кнопки/страницы скрыты)
Примеры
74.45K
Category: programmingprogramming

Доступы и роли (RBAC + Groups)

1. 1. Общие сущности

Permissio
ns
Roles
Groups
Users

2. 1) Permissions (атомарные права)

Permissions
passport.read
passport.write
analytics.read
analytics.build
service.toggle

Permissions

3. 2) Roles (наборы прав)

Role: Manager
- passport.read
- passport.write
Role: Line3
- passport.read
- analytics.read
Role: Developer
- passport.read
- analytics.build
- interface.update
Roles

4. 3) Groups (команды, отделы, категории)

Group: Managers
Roles → [Manager]
Group: Line3_Team
Roles → [Line3]
Group: Developers
Roles → [Developer, Line3]
Group: P305_Team
Roles → [Manager,
Developer]
Groups

5. 4) Users (пользователи)

user: Аблай Елшибаев
- User_id: [1856541]
user: Байгожа Жасулан
- User_id: [1856542]
Users
user: Капшаев Адиль
- User_id: [1856941]
user: Толейберген Ерлан
- User_id: [1857541]

6.

Диаграмма архитектуры ACL(RBAC +
Groups)
Permissions
Role
Group
User

7. 2. На основе Базы данных

8. Основные сущности(core entities)

USERS
-----------------id (PK)
username
email
status
created_at
updated_at
GROUPS
-----------------id (PK)
name
description
created_at
updated_at
ROLES
-----------------id (PK)
name
description
created_at
updated_at
PERMISSIONS
-----------------id (PK)
code (UNIQUE)
description
created_at
updated_at

9. Связывающие таблицы “junction tables / associative tables”

GROUP_ROLES
-----------------id (PK)
group_id (FK →
GROUPS.id)
role_id (FK →
ROLES.id)
USER_GROUPS
-----------------id (PK)
user_id (FK →
USERS.id)
group_id (FK →
GROUPS.id)
ROLE_PERMISSIONS
-----------------id (PK)
role_id (FK → ROLES.id)
permission_id (FK
→PERMISSIONS.id)

10. ER-диаграмма

PERMISSIONS
ROLE_PERMISSIONS
ROLES
ROLES
GROUP_ROLES
GROUPS
GROUPS
USER_GROUPS
USERS

11. 3. Resource based permissions

• Есть 3 уровня защиты:
• Backend authorization ← обязательно
• Frontend routing guard ← UX
• Frontend UI guard (скрываем кнопки, табы) ←
косметика

12. 3.1 BE: запрещаем доступ к ресурсу

Если у пользователя нет permission
passport.read, бекенд должен вернуть
403
Forbidden
Пример на Node.js/Nest/Fastify:
if
(!user.permissions.includes('passport.read')
) {
reply.code(403).send({ message:
"Forbidden" });
}

13. 3.2 FE: защита маршрутов (Router Guard)

Это UX-защита: человек не сможет зайти на
URL, даже если вручную введёт его.
403
Forbidden
Пример Next.js 13+:
export function middleware(req) {
const user = getUserFromSession(req);
if
(!user.permissions.includes('passport.read')
) {
return NextResponse.redirect('/403');
}
return NextResponse.next();

14. 3.3 FE: UI уровень (кнопки/страницы скрыты)

Если у пользователя нет permission
passport.read, бекенд должен вернуть
Hide React.ReactNode,
JSX.Element
Пример на Nextjs/ReactJS:
{can('passport.read') && (
<Link
href={`/services/${id}/passport
`}>
Паспорт услуги
</Link>
)}

15. Примеры

• AWS IAM,
• Keycloak
English     Русский Rules