【发布时间】:2011-04-30 16:03:38
【问题描述】:
我想实现第二个管理站点,它提供主管理站点的一部分功能。这是可能的,并在Django docs
中进行了描述但是,我想限制对主管理站点的访问。有些用户可以访问第二个站点,但不能访问主站点。
为了实现该功能,我希望这些用户不要在人员中(is_staff=False)并重写AdminSite.has_permission
class SecondaryAdminSite(AdminSite):
def has_permission(self, request):
if request.user.is_anonymous:
try:
username = request.POST['username']
password = request.POST['password']
except KeyError:
return False
try:
user = User.objects.get(username = username)
if user.check_password(password):
return user.has_perm('app.change_onlythistable')
else:
return False
except User.DoesNotExist:
return False
else:
return request.user.has_perm('app.change_onlythistable')
很遗憾,这种方法行不通。用户可以登录,但在辅助管理站点中看不到任何内容。
这种方法有什么问题? 知道如何实现此功能吗?
提前致谢
【问题讨论】:
-
你为什么不把你的用户划分成超级用户、经理、客户等等——权限系统工作得很好。
-
@Tomasz:我也在这样做。第二个管理站点具有不同的目的,因此可以针对不同类型的用户。我想避免他们连接到通常的管理员。
-
我假设您正在验证是否正在调用正确的
has_permission?页面上没有任何显示(即完全空白),还是只是隐藏了管理功能? -
它说我对这个应用没有任何权利。如果我恢复登录用户的 is_staff,我可以看到模型。
-
is_staff是管理员要求的。如果您出于某种原因无法将这些用户设置为 true,我认为您最好的选择是编写自己的管理视图。使用像has_permission装饰器这样的访问控制,您可以实施自己的授权方案。
标签: python django django-admin django-authentication