2012-04-07 54 views
1

我有一個包含多個應用程序的Django項目。我想限制特定用戶只能訪問一個特定的應用程序,並在創建用戶時,即不必修改views.py的所有方法,例如@permission_required等修飾器。將用戶限制爲單個應用程序

這可能嗎?也就是說,是否可以聲明用戶'A'只能使用應用程序'X'而不修改任何應用程序的'Y'代碼?

回答

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) 

顯然你需要改進啓發式(恩,這個人會允許訪問過「富用戶「查看」foobar「)以及考慮依賴Django內置視圖的應用程序(例如,direct_to_template)......但這是我要這樣做的方式。

相關問題