Similar presentations:
Доступы и роли (RBAC + Groups)
1. 1. Общие сущности
Permissions
Roles
Groups
Users
2. 1) Permissions (атомарные права)
Permissionspassport.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: ManagersRoles → [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
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-диаграмма
PERMISSIONSROLE_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: запрещаем доступ к ресурсу
Если у пользователя нет permissionpassport.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 уровень (кнопки/страницы скрыты)
Если у пользователя нет permissionpassport.read, бекенд должен вернуть
Hide React.ReactNode,
JSX.Element
Пример на Nextjs/ReactJS:
{can('passport.read') && (
<Link
href={`/services/${id}/passport
`}>
Паспорт услуги
</Link>
)}
15. Примеры
• AWS IAM,• Keycloak
programming