Python LDAP验证的DRF模型权限失败';d用户
我正在开发一个基于DRF的应用程序,需要LDAP身份验证。我遇到了一个问题,通过这个问题,我看到了直接通过DRF API登录的用户和从外部应用程序(即Curl/Postman)访问它的用户的不同行为 在应用程序中,一旦登录,我将提供一系列用户可以访问的视图/url,即下面查看“示例”的url: http://:8000/api/samples 我已使用自定义权限类将DjangoModelPermissions应用于我的示例视图,该视图需要模型权限才能查看模型,即:Python LDAP验证的DRF模型权限失败';d用户,python,django,django-rest-framework,django-auth-ldap,Python,Django,Django Rest Framework,Django Auth Ldap,我正在开发一个基于DRF的应用程序,需要LDAP身份验证。我遇到了一个问题,通过这个问题,我看到了直接通过DRF API登录的用户和从外部应用程序(即Curl/Postman)访问它的用户的不同行为 在应用程序中,一旦登录,我将提供一系列用户可以访问的视图/url,即下面查看“示例”的url: http://:8000/api/samples 我已使用自定义权限类将DjangoModelPermissions应用于我的示例视图,该视图需要模型权限才能查看模型,即: class HasModelP
class HasModelPermission(permissions.DjangoModelPermissions):
perms_map = {
'GET': ['%(app_label)s.read_%(model_name)s'],
'OPTIONS': ['%(app_label)s.read_%(model_name)s'],
'HEAD': ['%(app_label)s.read_%(model_name)s'],
'POST': ['%(app_label)s.add_%(model_name)s'],
'PUT': ['%(app_label)s.change_%(model_name)s'],
'PATCH': ['%(app_label)s.change_%(model_name)s'],
'DELETE': ['%(app_label)s.delete_%(model_name)s'],
}
class SampleView(generics.ListAPIView):
queryset = Sample.objects.all()
serializer_class = SampleSerializer
permission_classes = [HasModelPermission]
根据,我已经用AUTH_ldap_FIND_GROUP_PERMS=true配置了我的ldap设置,并为我关心的ldap组创建了匹配的DJANGO组,并且我已经为这些组分配了模型权限。这正如我所期望的那样工作-只有拥有查看列表权限的组成员用户才能看到它
我看到的关键问题是,虽然内部DRFAPI正确地确定了用户权限,但外部登录然后提交GET请求的用户被确定没有查看权限
我已经通过一些调试确定了原因是以下代码中的测试失败,这些代码来自django_auth_ldap.backend.py,它是从DRF中的视图调度程序调用的,基本上,当我从内置的DRF API访问url时,“hasattr(用户,'ldap_用户'):“当我通过邮递员或curl等连接时,返回true,”hasattr(用户,'ldap_user'):“返回false-显然意味着没有确定存在任何用户权限
def get_group_permissions(self, user, obj=None):
if not hasattr(user, 'ldap_user') and self.settings.AUTHORIZE_ALL_USERS:
_LDAPUser(self, user=user) # This sets user.ldap_user
if hasattr(user, 'ldap_user'):
permissions = user.ldap_user.get_group_permissions()
else:
permissions = set()
return permissions
因此,我想最终我的问题是,我应该如何在来自远程端点的HTTP操作之间填充/维护user.ldap_user属性。(注意,我使用的是会话和令牌身份验证ATM).我猜我的问题更多的是在操作之间维护用户lda_用户属性数据,或者在每个后续操作中检索它