1. 程式人生 > 其它 >12 RBAC-基於角色的訪問控制

12 RBAC-基於角色的訪問控制

RBAC-基於角色的訪問控制

一 什麼是RBAC

概念

RBAC  是基於角色的訪問控制(Role-Based Access Control )在 RBAC  中,許可權與角色相關聯,使用者通過成為適當角色的成員而得到這些角色的許可權。這就極大地簡化了許可權的管理。這樣管理都是層級相互依賴的,許可權賦予給角色,而把角色又賦予使用者,這樣的許可權設計很清楚,管理起來很方便。

# RBAC 是基於角色的訪問控制,一般用在公司內部系統,它是把許可權賦予給角色,角色又賦予使用者,實現許可權的控制

應用

# RBAC - Role-Based Access Control
# Django的 Auth元件 採用的認證規則就是RBAC

# 1)像專門做人員許可權管理的系統(CRM系統)都是公司內部使用,所以資料量都在10w一下,一般效率要求也不是很高
# 2)使用者量極大的常規專案,會分兩種使用者:前臺使用者(三大認證) 和 後臺使用者(BRAC來管理)
# 結論:沒有特殊要求的Django專案可以直接採用Auth元件的許可權六表,不需要自定義六個表,也不需要斷開表關係,單可能需要自定義User表

前後臺許可權控制

# 1)後臺使用者對各表操作,是後臺專案完成的,我們可以直接藉助admin後臺專案(Django自帶的)
# 2)後期也可以用xadmin框架來做後臺使用者許可權管理

# 3)前臺使用者的許可權管理如何處理
#   定義了一堆資料介面的檢視類,不同的登入使用者是否能訪問這些檢視類,能就代表有許可權,不能就代表無許可權
#   前臺使用者許可權用drf框架的 三大認證

二 Django的內建RBAC(六表)

# Django的 Auth元件 採用的認證規則就是RBAC

# Django的Auth元件,如何實現?通過6張表實現的
# 正常rbac需要5張表,但是django使用了6張
-使用者表:auth_user
   -角色(組表):auth_group
   -許可權表:auth_permission
   -------------以上三個表的關係表-------
   -使用者和組表的多對多:auth_user_groups
   -角色和許可權多對多:auth_group_permissions
   -使用者跟許可權的多對多:auth_user_user_permissions

許可權三表

許可權六表

三 實操

models.py

from django.db import models

from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
   mobile = models.CharField(max_length=11, unique=True)

   def __str__(self):
       return self.username


class Book(models.Model):
   name = models.CharField(max_length=64)

   def __str__(self):
       return self.name


class Car(models.Model):
   name = models.CharField(max_length=64)

   def __str__(self):
       return self.name

admin.py

from . import models

from django.contrib.auth.admin import UserAdmin as DjangoUserAdmin

# 自定義User表後,admin介面管理User類
class UserAdmin(DjangoUserAdmin):
   # 新增使用者課操作欄位
   add_fieldsets = (
      (None, {
           'classes': ('wide',),
           'fields': ('username', 'password1', 'password2', 'is_staff', 'mobile', 'groups', 'user_permissions'),
      }),
  )
   # 展示使用者呈現的欄位
   list_display = ('username', 'mobile', 'is_staff', 'is_active', 'is_superuser')


admin.site.register(models.User, UserAdmin)
admin.site.register(models.Book)
admin.site.register(models.Car)

這樣就可以登陸到admin後臺進行操作了