RBAC權限管理系統


RBAC--基於角色的權限管理系統

優勢:

1. 簡化了用戶和權限的關系

2. 易擴展,易於維護

3. RBAC不用給用戶單個分配權限,只用指向對應的角色就會有對應的權限,而且分配權限和收回權限都很方便

組成部分:用戶,角色,權限,用戶角色關系,角色權限關系

如下圖所示

 

功能需求列表:


 

權限控制流程


 

其實原理上是非常容易理解的,但是permission表的字段設計開始一直困擾着我,核心就兩個字段,operation,object,操作和對象,

django自帶的權限表就是將權限和具體操作的函數相關聯。

一個項目包含的表是成百上千張,而往往一些表的權限是相同的,在實際應用場景中,

我們並不需要將權限細分至每一張表,因此我們可以將權限抽象成幾個大類,例如,數據,用戶,消息,任務等等。

add data
delete data
edit data
query data
add user
add info
add task
......

  

django 權限設計實例

from datetime import datetime

from django.db import models
from django.contrib.auth.models import AbstractUser


class UserProfile(AbstractUser):
    """
    用戶
    """
    account = models.CharField(max_length=30, verbose_name="登錄名")
    really_name = models.CharField(max_length=10, verbose_name="真實姓名", blank=True)
    department = models.CharField(max_length=20, verbose_name="所屬部門", default="")
    tel_phone = models.CharField(max_length=11, verbose_name="手機號")
    create_time = models.DateTimeField(default=datetime.now, verbose_name="創建時間")
    last_time = models.DateTimeField(default=datetime.now, verbose_name="最后登錄")
    creator = models.CharField(default="Admin", verbose_name="創建者", max_length=20)

    class Meta:
        verbose_name = "用戶信息"
        verbose_name_plural = verbose_name


class Role(models.Model):
    name = models.CharField(max_length=20, verbose_name="角色名稱")
    describe = models.CharField(max_length=200, null=True, blank=True, verbose_name="角色描述")
    create_time = models.DateTimeField(default=datetime.now,verbose_name="創建時間")

    class Meta:
        verbose_name = "角色"
        verbose_name_plural = verbose_name


class UserRole(models.Model):
    user = models.ForeignKey(UserProfile, on_delete=models.CASCADE, verbose_name="用戶")
    role = models.ForeignKey(Role, on_delete=models.CASCADE, verbose_name="角色")

    class Meta:
        verbose_name = "用戶角色對應表"
        verbose_name_plural = verbose_name


class Permission(models.Model):
    cls_type = ((0, "拒絕"),
                (1, "允許"))
    name = models.CharField(max_length=30,null=True,verbose_name="權限名稱")
    status = models.SmallIntegerField(choices=cls_type,default=0,verbose_name="狀態")
    create_time = models.DateTimeField(default=datetime.now,verbose_name="創建時間")

    class Meta:
        verbose_name = "權限"
        verbose_name_plural = verbose_name

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM