Bismillahi Rohmani Rohim. Boshladik.
-
RBAC va ABACdan oldin keling Autentication vs Authorization. Bularning farqi nimada ? Bu ikkalasida ko'pchilik doim chalkashadi. Authentication - bu "Sen kimsan ?" degan savolga javob. Ya'ni login qilish. Authorization - bu "Senga nimalarni qilishga ruxsat bor ?" (RBAC va ABAC shu qismda)
-
RBAC (Role Based Access Control) nima o'zi ? Mantig'i juda ham oddiy:
User => Role => Permission => Resource
Misol:
type Role string
const (
RoleAdmin Role = "admin"
RoleSeller Role = "seller"
RoleCustomer Role = "customer"
)
User login qilganida unga role belgilaymiz. Shu orqali unga keyin nimalarni qila olishiga ruxsatlarni boshqara olamiz.
IF user.Role == "admin" THEN allow(delete_product)
IF user.Role == "seller" THEN allow(create_product)
RBACning kuchli tomonlari: Tushunishning osonligi: yangi dasturchilar RBACni osongina tushuna oladi Tez tekshirish: bitta if orqali map lookup, hech qanday murakkablik yo'q
RBACning zaif tomonlari: Tasavvur qiling sizda e-commerce bor va u yerda ko'plab sellerlar mavjud. Endi seller mahsulotni o'zgartirishi kerak. Shu qismida RBACda faqat role seller orqali tekshirib editga ruxsat berilsa barcha mahsulotlarni edit qila oladigna bo'lib qoladi ya'ni role == "seller" qilib tekshiriladi. Bunda seller o'z mahsulotini o'zgartira olishi kerak. Ana shu qismda bizda ABAC kerak bo'ladi.
- ABAC ( Attribute Based Access Control) ABACda asosiy tushuncha role emas, attributelar hisoblanadi.
ALLOW IF:
user.attribute == resource.attribute
(yoki boshqa har qanday mantiqiy shart)
Attributelar 4 xil turdan kelishi mumkin:
Subject (user ) ====== user.role, user.department ...
Resource ====== product.ownerID, product.category ...
Action ====== read, write, delete
Environment ====== vaqt (09:00 - 18:00), IP manzil, qurilma turi
Endi yuqoridagi misolni ABACda yozsak:
ALLOW edit_product IF:
user.role == "seller"
AND product.ownerID == user.id
RBAC va ABAC bu ikkalasi haqida umumiy qilib aytsak: RBAC role orqali boshqarish, ABAC attribute orqali.

