Как да дефинирам разрешения в Django без статус на персонал?

Бих искал да дам разрешения на определени потребители да създават статии, без да им давам статус на персонал.

Причината е, че не искам никой потребител да достигне до администраторския панел, за да се удостовери, както се случва, когато човек добави @staff_member_required към изглед. Вместо това просто искам да добавя /add/article връзка към профила на потребителите, които имат такова разрешение.

Как мога да го постигна?


person Jand    schedule 06.02.2015    source източник


Отговори (1)


Ако използвате традиционни функционални изгледи, можете да направите нещо подобно:

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, трябва или да украсите метода as_view() на вашия CBV (във вашия urls.py), или да използвате PermissionRequiredMixin от django-braces (http://django-braces.readthedocs.org/en/latest/access.html#permissionrequiredmixin) - или просто направете свои собствени проверки в dispatch() метод на CBV.

Освен това във вашия шаблон поставете своя URL адрес за add_article в проверка на perms, като това:

{% if perms.articles.add_article %}
     Show url for article editing only to users that have the rpmission
{% endif %}
person Serafeim    schedule 06.02.2015
comment
Използвам преходни функционални изгледи. Голяма помощ. Благодаря Серафеим. - person Jand; 06.02.2015