首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Django中为用户提供单个会话额外权限

如何在Django中为用户提供单个会话额外权限
EN

Stack Overflow用户
提问于 2016-08-23 17:17:03
回答 1查看 499关注 0票数 1

背景

我们有一个服务,django超级管理员可以登录并查看特定组织中的所有用户,并且这个超级管理员可以代替该用户“登录”。我想我们有

代码语言:javascript
复制
super admin = joe
users = mike, abe, tony

然后joe可以登录到一个组织,看到mike,abe和tony,然后joe可以登录系统,就像他们是mike一样。他们看到和做的每一件事都会像是Mike在做一样。因此,如果超级管理员具有创建公共事件的权限,但mike没有权限,则当超级管理员以mike身份登录时,他们也将无法创建事件。

到目前一切尚好。

然而,我们意识到,在许多情况下,我们希望超级管理员以mike的身份登录,并且仍然在系统中被识别为超级管理员。这对于数据迁移很有用,比如有时超级管理员实际上应该以mike的名义做一些mike自己做不到的事情。

问题

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

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

代码语言:javascript
复制
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)有机登录时的行为完全相同。我想在这个方法中给mike分配一些临时的特殊权限,允许mike做他通常不能做的事情。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-23 22:11:47

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39097148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档