Где существует определение таможенного разрешения?
В документах говорится, что приведенный ниже способ может использоваться для предоставления пользовательских разрешений. Декоратор has_perm используется для проверки пользовательских разрешений. Но это не говорит, где эти разрешения определены или что они делают. Разве мне не нужно их определять? Если да, где и как мне это сделать? Спасибо за помощь.
class Task(models.Model):
...
class Meta:
permissions = (
("view_task", "Can see available tasks"),
("change_task_status", "Can change the status of tasks"),
("close_task", "Can remove a task by setting its status as closed"),
)
1 ответ
Вы можете создать собственный класс разрешений, я сделал это ниже.
class BaseModelPerm(permissions.DjangoModelPermissions):
def get_custom_perms(self, method, view):
app_name = view.model._meta.app_label
if hasattr(view, 'extra_perms_map'):
return [app_name+"."+perms for perms in view.extra_perms_map.get(method, [])]
else:
return []
def has_permission(self, request, view):
perms = self.get_required_permissions(request.method, view.model)
perms.extend(self.get_custom_perms(request.method, view))
return (
request.user and
(request.user.is_authenticated() or not self.authenticated_users_only) and
request.user.has_perms(perms)
)
Выше разрешения может пользователь в любом виде, как показано ниже
class UserView(viewsets.ModelViewSet):
""" User model view for the admin user """
model = User
permission_classes = (
permissions.IsAuthenticated,
accounts_permissions.IsStaffOrVendor,
accounts_permissions.BaseModelPerm,
)
extra_perms_map = {
'GET': ["can_view_user"]
}
extra_perms_map - это разрешение, связанное с этим методом.