#django #django-rest-framework #django-rest-auth #django-permissions
#django #django-rest-framework #django-rest-auth #django-разрешения
Вопрос:
Я разработал API с использованием DRF. Я изо всех сил пытаюсь связать часть авторизации с разрешением Django по умолчанию, которое мы определяем в разделе администратора для каждой роли, с API.
Допустим, у меня есть два API Customer Management
и Customer Sales
, и из них созданы две роли на портале администратора Django. manager
роль будет управлять только клиентами ( add
, view
delete
и update
), тогда как sales
роль будет управлять продажами ( add
, view
delete
и update
) для каждого клиента.
Когда я пытаюсь протестировать их на портале администратора, разрешения работают нормально. Соответствующая роль имеет соответствующий доступ. Если я использую то же самое с REST API, оно не соответствует разрешению, определенному в серверной части. Похоже, что обе роли могут получать доступ к обоим API.
Как мне с этим справиться? Должен ли я реализовать свою собственную систему разрешений, игнорирующую старую ( auth_permission
, auth_group_permissions
auth_user_user_permissions
), используемую в Django, или есть какой-либо обходной путь для использования разрешений Django, чтобы заставить это работать?
Комментарии:
1. api_views не используют разрешения django по умолчанию. взгляните на django-rest-framework.org/api-guide/permissions /…
2. Итак, технически я могу игнорировать их и создавать свою собственную модель, не так ли?
3. Да, но предоставленная мной ссылка показывает, что вы также можете использовать модель разрешений django по умолчанию.
4. Хорошо, что вы предлагаете использовать .. если бы вам пришлось использовать angular или react в качестве интерфейса.. Авторизация по умолчанию или пользовательская.?
5. На этот вопрос сложно ответить, и он широко варьируется в зависимости от вариантов использования. Следует отметить, что основным преимуществом использования встроенных разрешений django является упрощение их редактирования с помощью страницы администратора django, которая предоставляет вам готовый серверный офис. если вы повторно реализуете разрешения, вам придется добавить свою собственную систему управления.
Ответ №1:
Вы можете создать свой класс разрешений, как показано ниже
class CustomPermission(BasePermission):
def has_permission(self, request, view):
if request.user.is_authenticated():
return True if request.has_perm('can_read') else False # or stuff similar to this
return False
И используйте этот CustomPermission
класс для своего APIView
атрибута.
Для получения дополнительной информации о разрешениях DRF посетите https://www.django-rest-framework.org/api-guide/permissions /