gpt4 book ai didi

python - 如何在 Django 中为用户授予单个 session 额外权限

转载 作者:太空宇宙 更新时间:2023-11-03 16:13:04 25 4
gpt4 key购买 nike

背景

我们有一项服务,django super 管理员可以登录并查看特定组织中的所有用户,并且该 super 管理员可以代替该用户“登录”。即假设我们有

super admin = joe
users = mike, abe, tony

然后 joe 可以登录到一个组织,看到 mike、abe 和 tony,然后 joe 可以像 mike 一样登录到系统。他们所看到的和所做的一切都就像是迈克在做的一样。因此,如果 super 管理员有权创建公共(public)事件,但 mike 没有,那么当 super 管理员以 mike 身份登录时,他们也将无法创建事件。

到目前为止一切顺利。

但是我们意识到,在许多情况下,我们希望 super 管理员以 mike 身份登录,并且仍然被系统识别为 super 管理员。这对于数据迁移目的很有用,即有时 super 管理员实际上应该以迈克的名义做一些迈克自己无法做的事情。

问题

这里的想法是我希望系统识别出 super 管理员以 mike 身份登录。然而,我在网上看到的所有问题(例如 this one )更多的是关于分配永久权限(即通过将它们存储在数据库中),而不是临时/短暂的权限。

这是当管理员单击 mike 旁边的登录按钮时调用的代码:

class LoginAsView(APIView):
permission_classes = []

def get(self, request, *args, **kwargs):
if request.user.is_superuser and 'username' in request.GET:
user = User.objects.get(email=request.GET['username'])
user.backend = settings.AUTHENTICATION_BACKENDS[0]
login(self.request, user)
return Response('/', 302, headers={'Location': '/'})
raise PermissionDenied('NO U')

正如您所看到的,我正在检索的用户的行为与该用户(即 mike)自然登录的行为完全相同。我想在这个方法中为迈克分配一些临时的特殊权限,允许迈克做他通常不能做的事情。

最佳答案

输入https://github.com/arteria/django-hijack

例如 django-hijack 向 session 添加额外的标志以检查用户是否被劫持 https://github.com/arteria/django-hijack/search?utf8=%E2%9C%93&q=is_hijacked_user

关于python - 如何在 Django 中为用户授予单个 session 额外权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39097148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com