社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

Kyell

Kyell 最近创建的主题
Kyell 最近回复了
3 年前
回复了 Kyell 创建的主题 » Django rest framework视图集中的chainig权限

当链接权限时,例如

permission_classes = [AccountOwnerPermission, IsAdminUser]

它的行为类似于权限类之间的AND运算符

最好的选择是创建一个新的权限,该权限允许权限逻辑。

class AdminOrAccountOwnerPermission(permissions.BasePermission):
    def has_object_permission(self, request, view, obj):
        return obj == request.user or request.user.id_admin

或者,当使用的权限具有长而复杂的代码以保持代码干燥时:

class AdminOrAccountOwnerPermission(permissions.BasePermission):
    def has_object_permission(self, request, view, obj):
        return AccountOwnerPermission().has_object_permission(request, view, obj) or IsAdminUser().has_object_permission(request, view, obj)

编辑: 请回答评论中的问题,说明其行为的原因 AllowAny . AccountOwnerPermission has_object_permission 但是没有 has_permission 另一方面 IsAdminUser 你有许可吗 但是没有 拥有_object _权限 实施。

当这些函数未实现时,函数返回 True 默认情况下(从 BasePermission ).因此,在跑步时 你有许可吗 , 帐户所有者权限 总是回来 符合事实的 跑步时 拥有_object _权限 , 艾德明 他总是回来 符合事实的 .

实施 AccountOwnerPermission.has_permission 将给出预期的行为。