1

我有一个包含多个应用程序的 Django 项目。我想在用户创建时限制特定用户只能访问一个特定的应用程序,即不必说views.py使用诸如@permission_required.

这可能吗?也就是说,是否可以声明用户“A”只能使用应用程序“X”而不修改任何应用程序“Y”的代码?

4

1 回答 1

2

您可以编写一些实现该process_view方法的中间件,然后检查视图函数属于哪个应用程序。

例如,这是您可以做到的一种(可能是错误的)方式:

class RestrictAppMiddleware(object):
    def process_view(self, request, view_func, *args, **kwargs):
        view_module = view_func.__module__
        allowed_apps = apps_visible_to_user(request.user)
        if not any(app_name in view_module for app_name in allowed_apps):
            return HttpResponse("Not authorized", status=403)

显然你需要改进启发式(例如,这个也允许用户访问“foo”视图“foobar”)并考虑依赖 Django 内置视图的应用程序(例如,direct_to_template)......但这是我会这样做的方式。

于 2012-04-07T23:12:16.860 回答