我目前正在使用此方法向用户提供与其相关的页面。
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/