django-rest-framework-role-filters
项目描述
如何安装
pip install djangorestframework-role-filters
为什么我要写这个项目?
我想在不使用代码中多个if的情况下轻松地处理角色
如何使用
创建包含角色定义的role_filters.py
from rest_framework_role_filters.role_filters import RoleFilter
from .serializers import PostSerializerForUser
class AdminRoleFilter(RoleFilter):
role_id = 'admin'
class UserRoleFilter(RoleFilter):
role_id = 'user'
def get_allowed_actions(self, request, view, obj=None):
# This example returns same list both for "global permissions" check,
# and for "object" permissions, but different list may be returned
# if `obj` argument is not None, and this list will be used to check
# if action is allowed during call to `ViewSet.check_object_permissions`
return ['create', 'list', 'retrieve', 'update', 'partial_update']
def get_queryset(self, request, view, queryset):
queryset = queryset.filter(user=request.user)
return queryset
def get_serializer_class(self, request, view):
return PostSerializerForUser
def get_serializer(self, request, view, serializer_class, *args, **kwargs):
fields = (
'body',
'created_at',
'id',
'serializer_name',
'title',
'updated_at',
'user',
)
return serializer_class(*args, fields=fields, **kwargs)
创建视图集并重写get_role_id方法
from rest_framework_role_filters.viewsets import RoleFilterModelViewSet
from .models import Post
from .role_filters import AdminRoleFilter, UserRoleFilter
from .serializers import PostSerializer
class PostViewSet(RoleFilterModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer
role_filter_classes = [AdminRoleFilter, UserRoleFilter]
def get_role_id(self, request):
return request.user.role.role_id
def perform_create(self, serializer):
serializer.save(user=self.request.user)
如果role_id是‘admin’
允许所有操作
返回默认查询集 -
Post.objects.all()
使用默认的
serializer_class
-PostSerializer
使用默认的视图集
get_serializer
方法
如果role_id是‘user’
只允许操作‘create’,‘list’,‘retrieve’,‘update’,‘partial_update’
查询集根据用户进行过滤
使用
serializer_class=PostSerializerForUser
使用带有
fields
kwargs的序列化器初始化(例如,用于如DRF: 动态修改字段中所述修改的序列化器)
查看testapp示例代码实现。
项目详情
关闭
djangorestframework-role-filters-1.1.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f2257a1036dc2db9fc29c352e869313d50db52078bfc1b2805a745c538229eb2 |
|
MD5 | 9633ebc403814877f56cc9d3004ea5e7 |
|
BLAKE2b-256 | 2bd86bc177f4880ffb5c0bad506dc736858c737c4f548d8103ca5b1546315723 |
关闭
djangorestframework_role_filters-1.1.0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 36c9a7f54ade0f43e9e30d7f6fe55a3ad171da447af479210dd90622844cc1a6 |
|
MD5 | 16a14bd91e45fee7ff97e5790a0c2a8d |
|
BLAKE2b-256 | 2a1cc9e1823dfea26731207fb26b5e08d57d5da02bebd7e9830eb23ee8b5f46d |