RBAC-基於角色的訪問控制

HammerZe發表於2022-04-07

RBAC-基於角色的訪問控制

什麼是RBAC

概念

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

前面我們說到三大認證,比如許可權,普通使用者和管理員能夠操作的介面就不一樣,比如我們常見的視訊軟體,不開會員能看的視訊寥寥無幾,這就是許可權的應用,但是這站在公司的角度是對外的許可權,比如後臺管理對公司內使用,公司內部的許可權該如何分配?就用到了RBAC

對外許可權針對使用者:普通註冊使用者,會員,超級會員····

對內許可權公司內部:使用RBAC的許可權控制

比如公司內部有開發部、財政部、市場部、人事部、運營部、總裁辦···
這寫部門的許可權是不同的,比如人事部有招人的權力,開發部有檢視修改提交程式碼的權力···

所以通過將許可權和角色(部門)繫結,而角色又賦予使用者,所以該部門有多大的權力,部門下的員工就有什麼樣的權力···

總體而言,RBAC針對公司內部專案,後臺管理開發居多

Django的內建RBAC(六表)

圖解

許可權三表

image

許可權六表

image


image

表關係

django的admin自帶rbac許可權管理(表設計完成許可權管理),6張表

使用者表、組表(角色、部門)、許可權表 ---> 三張

使用者和組多對多關係,存在中間表

使用者和許可權多對多關係,存在中間表

組和許可權多對多關係,存在中間表 -----> 三張

image

實操

models.py

from django.db import models



class Book(models.Model):
    name = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=5, decimal_places=2)
    author = models.CharField(max_length=32)

    # 物件描述,顯示書名
    def __str__(self):
        return self.name

    # 表名中文解釋
    class Meta:
        '''
        verbose_name 顧名思義 起一個複雜點的名稱,一般用來作中文解釋

        verbose_name_plural 顧名思義是一個複數名稱,因中文沒有複數
        但django有時又會將使用者的駝峰命名拆成單個詞,給最後的詞加複數,和使用者的本義不符,
        因些加了這樣一個選項來處理尷尬 比如 Blog Articals 或是 分類管理s
        '''
        # verbose_name = '圖書表'
        verbose_name_plural = '圖書表'

admin

from django.contrib import admin

from .models import Book

admin.site.register(Book)

登入admin操作

image


image

普通使用者只能檢視

image

新增到組裡,增加修改許可權

image

image


![image](https://img2022.cnblogs.com/blog/2608072/202204/2608072-20220407225423670-1053333751.png)

admin二次開發

初始樣式

image

admin.py

from django.contrib import admin

from .models import Book


# Register your models here.

class BookAdmin(admin.ModelAdmin):
    # 設定列表可顯示的欄位
    list_display = ('name', 'price', 'author')
    # 設定過濾選項
    list_filter = ('name', 'price')


admin.site.register(Book, BookAdmin)

二次開發後的樣式

image

相關文章