我有一個多語言的Django項目。每種語言都是不同的子域。 因此,我們決定使用「網站」應用程序併爲每種語言創建一個不同的網站。權限只有一個站點
在該項目上,我也有一個「頁面」應用程序,它與CMS非常相似。用戶可以創建包含內容的頁面,並將顯示在相應的語言網站中。
現在我期望能夠管理高級權限。我需要做的是允許用戶在管理應用程序中爲一個(或多個)特定語言/站點創建和更新頁面。
幹什麼更乾淨的方法呢?
編輯:這是由Chris
給我打造了檢查,如果用戶是適當地可以訪問郎集團在裝飾我已經適應瞭解決方案。 有關這方面的例子,請參閱Chris的接受答案。
在一個「正常」的說法,我做到以下幾點:
def view(self):
# Whatever you wanna do
return render_to_response('page.html', {}, RequestContext(request))
view = group_required(view)
如果用戶是該組中,它會返回的方法。否則,它會返回「拒絕訪問」錯誤。
在我管理,我執行以下操作:
class PageAdmin(admin.ModelAdmin):
list_display = ('title', 'published')
fieldsets = [
(None, {'fields': ['title', 'slug', 'whatever_field_you_have']}),
]
def has_add_permission(self, request):
return in_group_required(request)
admin.site.register(Page, PageAdmin)
凡in_group_required是類似的方法來group_required以上mentionned。但是,根據我們是否有權訪問,只會返回true或false。
因爲我們在前面的例子中使用了它們,所以在上面我會發現我的in_group和group_required方法。
def group_required(func):
def _decorator(request, *args, **kwargs):
if not in_group(request):
return HttpResponse("Access denied")
return func(*args, **kwargs)
return _decorator
def in_group(request):
language = Language.objects.get(site__domain__exact=request.get_host())
for group in language.group.all():
if request.user in group.user_set.all():
return True
return False
有趣的想法。在「正常」的視圖中很容易實現。但我需要在管理應用程序中過濾權限。我怎樣才能在那裏實現? – 2009-10-20 11:18:17