跳转到主要内容

未提供项目描述

项目描述

django-switchuser

django-switchuser 允许管理员通过访问 /su 来轻松切换到其他账户。

假设

因为 django-switchuser 是一个快速项目,所以它确实做出了一些假设。

  • 如果用户不允许su,则他们尝试访问 /su/ 或执行任何su相关操作时,将收到HTTP 404。

  • 任何超级用户都可以切换到任何其他用户。如果这个假设不成立:你需要提交一个pull请求(提示:查看 django_switchuser/state.py)… 对不起 :(

兼容性

已测试与Django 1.8至1.10版本,应适用于更早的Django版本。

安装

  1. pip install django-switchuser

  2. 将一些内容添加到 settings.py 中(注意:SuStateMiddleware 应该是列表中的 第一个 类;这保证了 request.su_state 总是可用的)

    INSTALLED_APPS = (
        ...
        "django_switchuser",
        ...
    )
    
    MIDDLEWARE_CLASSES = (
        "django_switchuser.middleware.SuStateMiddleware",
        ...
    )
    
    TEMPLATE_CONTEXT_PROCESSORS = (
        ...
        "django_switchuser.context_processors.su_state",
        ...
    )
  3. urls.py 中添加一个条目(注意:你可以使用任何你喜欢的URL;su/ 只是一个方便的选择)

    urlpatterns += patterns("",
        ...
        url(r"^su/", include("django_switchuser.urls")),
        ...
    )
  4. 启动服务器,通过访问 http://localhost:8000/su/ 检查一切是否正常工作 注意:如果当前登录的用户不允许su(默认情况下,只有管理员允许su),则将返回HTTP 404。

  5. (可选)将条目添加到您的 base.html 模板中,这将显示一个方便的注销按钮

    <html>
        <head>...</head>
        <body>
            ...
            {% include "su/statusbar.html" %}
        </body>
    </html>
  6. (可选) 覆盖 SuState 以更好地适应您的应用程序。例如,要包含用户个人资料的字段,您可以像这样子类化 SuState(更详细的文档请见下文)

    from django.contrib.auth.models import User
    from django_switchuser.state import SuState as DefaultSuState
    
    class SuState(DefaultSuState):
        def available_users(self):
            return User.objects.all()\
                .select_related("profile")\
                .order_by("profile__client_id")
    
        def user_long_label(self, user):
            return "%s (%s)" %(user.get_profile().client_id, user.username)
    
        def user_short_label(self, user):
            return "%s" %(user.get_profile().client_id, )

    然后将其添加到您的 settings.py 文件中

    SU_STATE_CLASS = 'myapp.su.SuState'

自己动手

自己动手非常简单。 SuStateMiddlewaresu_state 上下文处理器为 request 添加了 su_state 属性,并在模板渲染上下文中添加了 su_state 变量。 su_statedjango_switchuser.state.SuState 的实例,并具有以下属性

SuState.is_active():

如果当前用户已切换,则返回 True

SuState.auth_user:

与请求关联的原始用户。例如,如果用户 admin 切换到 jane,则 su_state.auth_user 将为 admin

SuState.active_user:

已切换的用户,如果没有用户已切换,则为 None。例如,如果用户 admin 切换到 jane,则 su_state.active_user 将为 admin

SuState.can_su():

如果当前用户被允许切换,则返回 True

SuState.available_users():

返回一个 QuerySet,其中包含当前用户被允许切换到的 User。这可能很有用,可以覆盖此方法以在用户个人资料上执行 select_related()

def available_users(self):
    return User.objects.all()\
        .select_related("profile")\
        .order_by("profile__client_id")
SuState.user_long_label(user):

返回用户的“长”标签,用于用户列表。这可能很有用,可以覆盖此方法以包含特定于您应用程序的信息。

def user_long_label(self, user):
    return "%s (%s)" %(user.get_profile().client_id, user.username)
SuState.user_short_label(user):

返回用户的“短”标签,用于状态栏和其他位置。这可能很有用,可以覆盖此方法以包含特定于您应用程序的信息。

def user_short_label(self, user):
    return "%s" %(user.get_profile().client_id, )
SuState.set_su_user_id(su_user_id):

如果 su_user_id 包含在 SuState.available_users() 中,则切换到具有 id su_user_id 的用户。

SuState.set_su_user(su_user):

切换到 su_user 用户。不执行权限检查。

SuState.clear_su():

还原到原始用户。

例如,如果您不喜欢默认的用户切换栏,您可以在 base.html 中添加自己的。

{% load switchuser %}
{% load url from future %}

{% if su_state.is_active %}
    <a href="{% url "su-logout" %}">deactive {% su_user_short_label su.active_user %}</a>
{% elif su_state.can_su %}
    <a href="{% url "su-login" %}">switch user</a>
{% endif %}

项目详情


下载文件

下载适合您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

django-switchuser-0.6.1.tar.gz (8.0 kB 查看散列)

上传时间: 源代码

构建版本

django_switchuser-0.6.1-py2-none-any.whl (12.9 kB 查看哈希值)

上传时间: Python 2

支持