我有一个多语言的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