1
我有一個包含多個應用程序的Django項目。我想限制特定用戶只能訪問一個特定的應用程序,並在創建用戶時,即不必修改views.py
的所有方法,例如@permission_required
等修飾器。將用戶限制爲單個應用程序
這可能嗎?也就是說,是否可以聲明用戶'A'只能使用應用程序'X'而不修改任何應用程序的'Y'代碼?
我有一個包含多個應用程序的Django項目。我想限制特定用戶只能訪問一個特定的應用程序,並在創建用戶時,即不必修改views.py
的所有方法,例如@permission_required
等修飾器。將用戶限制爲單個應用程序
這可能嗎?也就是說,是否可以聲明用戶'A'只能使用應用程序'X'而不修改任何應用程序的'Y'代碼?
您可以編寫一些實現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)
顯然你需要改進啓發式(恩,這個人會允許訪問過「富用戶「查看」foobar「)以及考慮依賴Django內置視圖的應用程序(例如,direct_to_template
)......但這是我要這樣做的方式。