问题描述
嗨,我正在研究树结构角色。 有4个角色 1.A 2.B 3.C 4.D
哪里
C 和 D 类似。 我可以在 Django 中创建不同的视图和使用权限。 但我想使用一个视图来实现这一点。我将通过 url 添加角色 假设通过 url 而不是选择。
请帮我解决这个问题。
提前致谢。
解决方法
来自Django docs:
不仅可以按对象类型设置权限,还可以按对象设置权限 特定对象实例。通过使用 has_view_permission(), has_add_permission(),has_change_permission() 和 ModelAdmin 类提供的 has_delete_permission() 方法,它 可以为不同的对象实例自定义权限 同类型。
因此,如果您使用的是 django 管理界面,则可以覆盖 ModelAdmin 中的 has_*_permission 方法。
对于您的自定义视图,您可以使用 @user_passes_test 装饰器。我想这应该适用于您的情况。
,您可以使用 Imagine smart compiler 创建自定义 Roles
和 Permissions
。
类似以下的内容应该可以工作:
Permission A
Permission B
Permission C
Permission D
API /api1 {
actions [Create,Read,ReadMany,Delete]
permissions [A]
}
....
编译:
imagine compile myapp.im
这将产生: permissions.py
from rest_framework import permissions
class A(permissions.BasePermission):
def has_permission(self,request,view):
return request.user and request.user.has_perm('app.A')
class B(permissions.BasePermission):
def has_permission(self,view):
return request.user and request.user.has_perm('app.B')
class C(permissions.BasePermission):
def has_permission(self,view):
return request.user and request.user.has_perm('app.C')
class D(permissions.BasePermission):
def has_permission(self,view):
return request.user and request.user.has_perm('app.D')
views.py
from .models import Product
from .permissions import A
from .serializers import ProductSerializer
class Api1ViewSet(viewsets.GenericViewSet,mixins.CreateModelMixin,mixins.RetrieveModelMixin,mixins.ListModelMixin,mixins.DestroyModelMixin):
queryset = Product.objects.all()
serializer_class = ProductSerializer
permission_classes = [A]
filterset_fields = ['id','name','price','description']