如何在没有人员状态的Django中定义权限?

How to define permissions in Django without staff status?

我想授予某些用户创建文章的权限,但不向他们分配员工身份。

原因是我不希望任何用户访问管理面板进行身份验证,就像将 @staff_member_required 添加到视图时发生的那样。相反,我只想在拥有此类权限的用户的个人资料中添加 /add/article link。

我怎样才能做到这一点?

如果您使用的是传统功能视图,您可以这样做:

def add_article(request):
    if not request.user.has_perm('articles.add_article'):
        return HttpResponseForbidden()
    # Now only users that have the permission will reach this 
    # so add your normal view handling

但是,我建议使用 django.contrib.auth.decorators.permission_required 装饰器来代替上面的方法:

@permission_required('articles.add_article')
def add_article(request):
    # your normal view handling

如果您正在使用 CBV,您应该装饰 CBV 的 as_view() 方法(在您的 urls.py 中)或使用 django-braces 中的 PermissionRequiredMixinhttp://django-braces.readthedocs.org/en/latest/access.html#permissionrequiredmixin) - 或者只是在 CBV 的 dispatch() 方法中进行自己的检查。

此外,在您的模板中将您的 add_article url 放入权限检查中,如下所示:

{% if perms.articles.add_article %}
     Show url for article editing only to users that have the rpmission
{% endif %}