gpt4 book ai didi

python - 仅限网站的权限

转载 作者:太空宇宙 更新时间:2023-11-03 15:29:13 25 4
gpt4 key购买 nike

我有一个多语言 Django 项目。每种语言都是不同的子域。因此我们决定使用“站点”应用程序并为每种语言创建一个不同的站点。

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

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

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

编辑:这是我改编的解决方案,由 Chris 提供

我创建了一个装饰器,用于检查用户是否适本地位于有权访问 lang 的组中。有关此示例,请参阅 Chris 接受的答案。

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

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

最佳答案

您可以创建一个群组 ( http://docs.djangoproject.com/en/dev/topics/auth/ )每个站点/语言并将用户相应地添加到组中。

然后,您可以检查 request.user.groups 是否属于该组。(你可以用装饰器做到这一点:

def group_required(func):
def _decorator(request, *args, **kwargs):
hostname = request.META.get('HTTP_HOST')
lang = hostname.split(".")[0]
if not lang in request.user.groups:
return HttpResponse("Access denied")
return func(*args, **kwargs)
return _decorator

(更正/修改代码以满足您的要求...)

关于python - 仅限网站的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1593423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com