python - Django 应用自定义用户权限

标签 python django

我目前正在使用此方法向用户提供与其相关的页面。

def get_user_url(request):
    un = request.user.username
    t = get_template(un + '.htm')
    html = t.render()
    return HttpResponse(http)

我只期望有少量用户,每个用户代表一个公司,所以这不是问题,因为我可以简单地拥有五六个具有不同内容的 html 文件。 现在,我被要求考虑每个公司的多个用户,假设同一公司下的用户具有不同的权限。

所以我查看了自定义权限的文档:https://docs.djangoproject.com/en/dev/topics/auth/customizing/#custom-permissions这可以工作,但我最终可能会得到一个包含 30 行的权限类,如下所示,这对我来说是一个糟糕的方法。

permissions = (
        ("company1_permission1", "Company 1 Permission 1"),
        ("company1_permission2", "Company 1 Permission 2"),
        ("company2_permission1", "Company 1 Permission 1"),
        ("company2_permission2", "Company 1 Permission 2"),
        ("company3_permission1", "Company 1 Permission 1"),
    )

有没有办法向用户添加“公司”字段并使用上述方法?因此,除非用户来自正确的公司,否则他们甚至无法访问页面。然后,在该页面中,我将自定义权限应用于该页面上的内容。

或者是否有更好的方法来实现此类功能。 我是 django 和 python 的新手。

最佳答案

一个好的解决方案是使用 @user_passes_test() decorator .

文档提供了一个很好的示例,用于确保用户的电子邮件来自特定公司,您可以轻松地根据您的用例进行调整:

from django.contrib.auth.decorators import user_passes_test

def email_check(user):
    return user.email.endswith('@example.com')

@user_passes_test(email_check)
def my_view(request):
    ...

这种方法的主要问题是您无法访问代码中的 request 对象。解决方案是使用基于类的 View ,其中 UserPassesTestMixin 可以访问 self.request

关于python - Django 应用自定义用户权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36335294/

相关文章:

Python BeautifulSoup 如何获取最新选择器的数据

python - 如果坐标对不在列表中,则从数据框中删除

python - 在 N 球面上生成均匀分布的随机点的算法

django - 如何在不位于/accounts/login url 的情况下显示 django allauth 注册页面?

python - 自定义简单的 Python HTTP 服务器不提供 css 文件

使用 Django csrf_exempt View 注册 Android GCM。最佳实践?

python - 如何使用 django rest 框架发送文件作为响应?

django - django_webtest 中的用户身份验证

python - Django - 在同一模型中有多个外键

python - PyTorch 数据集/Dataloader 批处理