91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

django怎么自定義權限系統

發布時間:2021-07-12 11:02:09 來源:億速云 閱讀:162 作者:chen 欄目:大數據

本篇內容介紹了“django怎么自定義權限系統”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

最近項目中需要做套權限管理系統,功能需求是對后端當前所有接口添加個權限驗證功能,如果用戶有訪問這個接口權限則返回數據,沒有這個接口的權限就提示用戶無權訪問該接口。屬于按鈕級別的權限控制。

用戶權限管理的思路,對角色進行權限的管理,判斷用戶屬于哪些個角色,這些角色有哪些權限,用戶就會有其角色對應的權限。總的來說是基于RABC 權限控制。

權限管理用到的 models 模型有
1.角色模型
2.權限名稱模型
3.用戶模型

相關模型代碼如下:

class PowerDetail(BaseModel):    name = models.CharField(verbose_name="權限明細名稱", max_length=20)    code = models.CharField(verbose_name="權限明細編碼", max_length=50, unique=True)
   class Meta:        db_table = "base_power_detail"        unique_together = ("code", "name")        verbose_name = "角色權限明細"        verbose_name_plural = "角色權限明細"        ordering = ["id"]
   def __str__(self):        return self.name

class Role(BaseModel):    user = models.ManyToManyField(BaseUser, related_name="roles")    name = models.CharField(verbose_name="角色名稱", max_length=20)    power_detail = models.ManyToManyField(PowerDetail, related_name="roles")
   class Meta:        verbose_name = "用戶角色角色"        verbose_name_plural = "用戶角色"
   def __str__(self):        return self.name

對用戶判斷權限時是查詢 redis ,沒有走 mysql 數據庫,這樣可以減少數據庫訪問的壓力。用戶的角色管理和角色的權限管理我是通過django自帶的 admin 進行管理。管理用戶角色時,通過重寫 admin 方法,把用戶對應的權限保存到 redis 中。

判斷用戶是否有權限的代碼是通過一個裝飾器 check_power 實現的,代碼如下:

def check_user_power(user, power_code):    """判斷員工是否有 power_code 對應的權限"""    return r_db.sismember(get_user_power_key(user), power_code)

# 給類方法添加的裝飾器def check_power(code):    def decode(func):        def wrapper(self, request, *args, **kwargs):            user = request.login_user            if not check_user_power(user, code):                return Response({"error": "沒有權限操作", "code": 401})            res = func(self, request, *args, **kwargs)            return res        return wrapper    return decode
class V1VideoClassView(APIView):    @check_power(PowerDetailCode.category_label_manage.code)    def get(self, request):        """視頻分類"""        # {"id", "類別名稱"}        res = [{"id": key, "name": value} for key, value in class_dict.items()]        return Response(res)

“django怎么自定義權限系統”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

红安县| 神木县| 元朗区| 荆门市| 临武县| 永济市| 阿荣旗| 涞水县| 定州市| 夏邑县| 宁阳县| 东莞市| 中西区| 雅江县| 镇远县| 剑川县| 浑源县| 华亭县| 磐石市| 项城市| 曲水县| 高碑店市| 刚察县| 绥芬河市| 鹿邑县| 高台县| 堆龙德庆县| 贵溪市| 淮北市| 嫩江县| 安泽县| 临城县| 嘉义县| 三亚市| 安图县| 精河县| 林甸县| 砚山县| 西峡县| 宁晋县| 平果县|