当前位置: 首页 > 面试题库 >

管理员对Django用户的模拟

施自珍
2023-03-14
问题内容

我有一个Django应用。当以管理员用户身份登录时,我希望能够在URL中传递一个秘密参数,并使整个网站的行为就像我是另一个用户一样。

假设我有/my-profile/显示当前登录用户个人资料的URL 。我希望能够做类似的事情/my- profile/?__user_id=123,并使基础视图相信我实际上是ID 123的用户(因此呈现 用户的个人资料)。

我为什么要那样?

仅仅因为重现仅出现在单个用户帐户中的某些错误要容易得多。

我的问题:

  1. 实现这样的最简单的方法是什么?

  2. 在执行此操作时,我应该考虑任何安全问题吗?请注意,我(显然)只想为管理员用户提供此功能,并且我们的管理员用户无论如何都具有对源代码,数据库等的完全访问权限,因此它并不是真正的“后门”。它只是使访问用户帐户 变得更加容易


问题答案:

我用一个简单的中间件解决了这个问题。它还处理重定向(即,在重定向过程中保留GET参数)。这里是:

class ImpersonateMiddleware(object):
    def process_request(self, request):
        if request.user.is_superuser and "__impersonate" in request.GET:
            request.user = models.User.objects.get(id=int(request.GET["__impersonate"]))

    def process_response(self, request, response):
        if request.user.is_superuser and "__impersonate" in request.GET:
            if isinstance(response, http.HttpResponseRedirect):
                location = response["Location"]
                if "?" in location:
                    location += "&"
                else:
                    location += "?"
                location += "__impersonate=%s" % request.GET["__impersonate"]
                response["Location"] = location
        return response


 类似资料:
  • 问题内容: 我正在尝试获取Django Admin界面来显示有关我的个人资料的信息。它显示我的所有用户,但不显示个人资料信息。我不太确定如何使它正常工作。 我在Google快速搜索后找到了以下代码: 但是,我认为它没有用。当我登录到管理页面时,我看到“用户”,“组”和“站点”。我单击用户,然后看到所有用户的列表,但没有任何个人资料的迹象。单击某个用户会显示有关该用户的信息,但仍然没有个人资料信息。

  • 问题内容: 在要显示已注册模型的管理站点的根页面上,我想隐藏已注册到Django admin的多个模型。 如果我直接注销这些记录,由于添加新符号“ +”消失了,因此我无法添加新记录。 如何才能做到这一点 ? 问题答案: 基于x0nix的答案,我做了一些实验。似乎从返回空会将模型从index.html中排除,同时仍然允许你直接编辑实例。

  • 主要内容:启动管理界面Django为管理活动提供随时可以使用的用户界面。 我们都知道,管理界面对于一个Web项目是十分重要的。 Django根据您的项目模型自动生成管理界面。 启动管理界面 管理界面依赖于 django.contrib 模块。若需它工作,需要确保一些模块是否导入在 myproject/settings.py 文件中的INSTALLED_APPS和MIDDLEWARE_CLASSES元组。 对于 INST

  • 我们提供了一个用于模型管理和策略管理的门户网站 Casdoor 还有第三方门户管理项目,使用Casbin作为授权引擎。 您可以基于这些项目建立您自己的 Cabin 服务。GoJavaNode.jsPythonPHP 项目 作者 前端 后端 说明 Casdoor Casbin React + Ant Design Beego 基于 Beego + XORM + React go-admin-team

  • 用户管理 当多级审核关闭后系统并不会自动将角色为执行人的用户重置角色,请自行重置相应用户角色。 数据库管理 所有添加的数据源应在添加之前点击测试连接按钮进行连接性测试,保证连接性。 数据源分为查询数据源/非查询数据源/读写数据源。查询数据源仅会出现在细粒度权限的查询数据源范围内。非查询数据源同理。(对于查询与执行数据源应拆分为二,保障线上执行数据源不会因为查询慢sql影响业务)默认为读写数据源。此

  • 我对“ django-admin 启动项目 mysite . ” 命令有问题。当我尝试执行它时,Cygwin向我返回了一个错误: 回溯 (最近一次调用最后): 文件 “/usr/bin/django-admin”, 第 9 行, 在 load_entry_point(“Django==1.10.2”,“console_scripts”, “django-admin”)() 文件“/usr/lib/