真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

django怎么自定義權(quán)限系統(tǒng)

本篇內(nèi)容介紹了“django怎么自定義權(quán)限系統(tǒng)”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)公司自2013年創(chuàng)立以來(lái),是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站建設(shè)、做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元隆昌做網(wǎng)站,已為上家服務(wù),為隆昌各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575

最近項(xiàng)目中需要做套權(quán)限管理系統(tǒng),功能需求是對(duì)后端當(dāng)前所有接口添加個(gè)權(quán)限驗(yàn)證功能,如果用戶有訪問(wèn)這個(gè)接口權(quán)限則返回?cái)?shù)據(jù),沒(méi)有這個(gè)接口的權(quán)限就提示用戶無(wú)權(quán)訪問(wèn)該接口。屬于按鈕級(jí)別的權(quán)限控制。

用戶權(quán)限管理的思路,對(duì)角色進(jìn)行權(quán)限的管理,判斷用戶屬于哪些個(gè)角色,這些角色有哪些權(quán)限,用戶就會(huì)有其角色對(duì)應(yīng)的權(quán)限??偟膩?lái)說(shuō)是基于RABC 權(quán)限控制。

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

相關(guān)模型代碼如下:

class PowerDetail(BaseModel):    name = models.CharField(verbose_name="權(quán)限明細(xì)名稱", max_length=20)    code = models.CharField(verbose_name="權(quán)限明細(xì)編碼", max_length=50, unique=True)
   class Meta:        db_table = "base_power_detail"        unique_together = ("code", "name")        verbose_name = "角色權(quán)限明細(xì)"        verbose_name_plural = "角色權(quán)限明細(xì)"        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

對(duì)用戶判斷權(quán)限時(shí)是查詢 redis ,沒(méi)有走 MySQL 數(shù)據(jù)庫(kù),這樣可以減少數(shù)據(jù)庫(kù)訪問(wèn)的壓力。用戶的角色管理和角色的權(quán)限管理我是通過(guò)django自帶的 admin 進(jìn)行管理。管理用戶角色時(shí),通過(guò)重寫(xiě) admin 方法,把用戶對(duì)應(yīng)的權(quán)限保存到 redis 中。

判斷用戶是否有權(quán)限的代碼是通過(guò)一個(gè)裝飾器 check_power 實(shí)現(xiàn)的,代碼如下:

def check_user_power(user, power_code):    """判斷員工是否有 power_code 對(duì)應(yīng)的權(quán)限"""    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": "沒(méi)有權(quán)限操作", "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怎么自定義權(quán)限系統(tǒng)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


網(wǎng)站題目:django怎么自定義權(quán)限系統(tǒng)
URL地址:http://weahome.cn/article/gigiep.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部