【问题标题】:how to override list permission with django-rules如何使用 django-rules 覆盖列表权限
【发布时间】:2022-08-08 23:27:26
【问题描述】:

我在我的项目中安装了django-rules 来定义我的操作规则。列表功能默认没有权限设置,因此您必须将它们添加到permission_type_map,如here 所写,但没有效果。对于其他操作,如果我将其设置为 is_superuser 或其他内容,我可以更改行为。

from django.db import models

import rules
from rules.contrib.models import RulesModel
from rules.contrib.rest_framework import AutoPermissionViewSetMixin

from base.models import BaseModel


class Company(RulesModel, BaseModel):
    name = models.CharField(max_length=100)
    active = models.BooleanField(default=True)

    permission_type_map = {
        **AutoPermissionViewSetMixin.permission_type_map,
        \"list\": \"all\",
    }

    class Meta:
        rules_permissions = {
            # TODO: rules need to be defined
            \"add\": rules.always_allow,
            \"view\": rules.always_allow,
            \"delete\": rules.always_allow,
            \"change\": rules.always_allow,
            \"all\": rules.is_superuser
        }

我在这里想念什么?

    标签: python django django-rest-framework django-rules


    【解决方案1】:

    我是 django-rules 的新手,但从我在 docs 中看到的内容来看,您只能在使用或继承 AutoPermissionViewSetMixin 时扩展/更改 permission_type_map。尝试在 ViewSet 类中定义 permission_type_map 字典:

    from rest_framework import viewsets
    from rules.contrib.rest_framework import AutoPermissionViewSetMixin
    
    class MyViewSet(AutoPermissionViewSetMixin, viewsets.ModelViewSet):
    
        permission_type_map = {
            **AutoPermissionViewSetMixin.permission_type_map,
            "list": "all",
        }
    
    

    【讨论】:

      猜你喜欢
      • 2018-12-21
      • 2023-03-29
      • 1970-01-01
      • 2019-08-24
      • 2016-10-19
      • 1970-01-01
      • 2019-03-05
      • 2020-09-01
      • 1970-01-01
      相关资源
      最近更新 更多