python 权限_python-仅网站权限

我有一个多语言的Django项目.每种语言都是不同的子域.

因此,我们决定使用“站点”应用程序,并为每种语言创建一个不同的站点.

在该项目上,我还有一个“页面”应用程序,与CMS非常相似.用户可以创建包含内容的页面,并将它们显示在适当的语言站点中.

现在,我希望能够管理高级权限.我需要做的是允许管理员在管理应用程序中只为一种(或多种)特定语言/站点创建和更新页面.

做这样的事情更干净的方法是什么?

编辑:这是克里斯适应的解决方案

我创建了一个装饰器,用于检查用户是否在可以访问lang的组中.

有关此示例,请参见克里斯接受的答案.

在“正常”视图中,我执行以下操作:

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类似的方法.但是根据我们是否可以访问,只会返回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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值