Bismillahi Rohmani Rohim. Boshladik.

  1. 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)

  2. 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.

  1. 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.