Разрешение на просмотр, но не на изменение! - Джанго - PullRequest
23 голосов
/ 18 июня 2010

можно дать пользователям разрешение на просмотр, но не изменять или удалять.

В настоящее время я вижу только разрешения "добавить", "изменить" и "удалить" ... нотам нет «чтения / просмотра».

Мне это действительно нужно, так как некоторые пользователи смогут обращаться только к админ-панели, чтобы увидеть, что было добавлено.

Ответы [ 12 ]

18 голосов
/ 19 марта 2011

In admin.py

# Main reusable Admin class for only viewing
class ViewAdmin(admin.ModelAdmin):

    """
    Custom made change_form template just for viewing purposes
    You need to copy this from /django/contrib/admin/templates/admin/change_form.html
    And then put that in your template folder that is specified in the 
    settings.TEMPLATE_DIR
    """
    change_form_template = 'view_form.html'

    # Remove the delete Admin Action for this Model
    actions = None

    def has_add_permission(self, request):
        return False

    def has_delete_permission(self, request, obj=None):
        return False

    def save_model(self, request, obj, form, change):
        #Return nothing to make sure user can't update any data
        pass

# Example usage:
class SomeAdmin(ViewAdmin):
    # put your admin stuff here
    # or use pass

В change_form.html замените это:

{{ adminform.form.non_field_errors }}

с этим:

<table>
{% for field in adminform.form %}
    <tr>
      <td>{{ field.label_tag }}:</td><td>{{ field.value }}</td>
    </tr>
{% endfor %}
</table>

Затем удалите кнопку отправки, удалив эту строку:

{% submit_row %}
6 голосов
/ 06 марта 2018

Вы можете использовать приложение django-admin-view-Разрешения :

pip install django-admin-view-permission

INSTALLED_APPS = [
    'admin_view_permission',
    'django.contrib.admin',
    ...
]

UPDATE:

Django 2.1 имеет разрешение на просмотр из коробки.

3 голосов
/ 24 августа 2013

Чтобы предоставить образец Бернхарду Валланту, упомяните выше.В моем файле admin.py я бы поместил

class LogBookAdmin(admin.ModelAdmin):
    list_display        = ['dateEntry','due_date', 'controlNo', 'carrier', 'status']    
    exclude             = ['encoder_status', 'engr_status', 'chief_status', 'ischecked']

    def save_model(self, request, obj, form, change):     
        if request.user.groups.filter(name='Encoder').exists():
            pass
        else:
            return super(LogBookAdmin, self).save_model(request, obj, form, change)

Предполагая, что у меня есть имя группы Encoder, где я хотел бы, чтобы они просматривали только Журнал.Но другое имя группы может сохранить любые изменения.

3 голосов
/ 18 июня 2010

Одним из обходных путей было бы иметь дополнительное разрешение «сохранить» для вашей модели и проверить в методе modeladmin save_model, есть ли у пользователя эти разрешения, если у него его нет, это означало бы, что он может делать все в этом modeladmin,кроме сохранения отредактированных данных!

3 голосов
/ 18 июня 2010

Вы не можете просто просматривать вещи в админке django.

Для этого есть приложение databrowse .

2 голосов
/ 05 июля 2010

Вы можете сделать это следующим образом:

1) Поля можно читать только в том случае, если объект был создан. Но при этом никто не сможет изменить поля

2) Вы можете использовать базу данных

3) Вы можете использовать проверку формы, если пользователь отсутствует в выбранном списке. Ошибка проверки при изменении любого поля

4) вы можете создать представление, если пользователь находится в вашем списке, затем перенаправить его в обычный поток или же перенаправить на простую html страницу только для чтения

5) Используйте jquery, чтобы сделать поля доступными только для чтения, если пользователь отсутствует в списке, и переопределите метод сохранения, чтобы проверить любую интеллектуальность. В вашем методе сохранения выдается ошибка, любая форма изменилась, а пользователя нет в вашем списке. request.user.username

0 голосов
/ 12 марта 2019

В django 2.1 вам просто нужно переопределить has_change_permission и has_delete_permission:

@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):

    def has_change_permission(self, request, obj=None):
        return False

    def has_delete_permission(self, request, obj=None):
        return False

    # to disable view and add you can do this 
    def has_view_permission(self, request, obj=None):
        return False

    def has_add_permission(self, request):
        return False

0 голосов
/ 03 марта 2019

Это довольно старая тема, и большинство людей уже знают это, но ... Django 2.0 имеет встроенную view_permissions ссылку на потрясающие разрешения на просмотр

0 голосов
/ 23 ноября 2018

Я вижу, что с предложенными ответами вы столкнетесь, вероятно, с большим количеством проблем, чем вам нужно сделать для себя, поскольку я попробовал все вышеупомянутые ответы над собой. Я наконец-то понял это:

То, как я это сделал, вы найдете в Django Admin Cookbook , чтобы сделать поля, которые вы хотите редактировать, при создании / добавлении, но только для чтения после. Другими словами, после создания объекта все поля, которые вы переопределяете в этом методе, который предоставляет ссылка, будут доступны только для чтения, и вы не сможете редактировать их после добавления в модель базы данных.

0 голосов
/ 24 мая 2016

У меня есть обходной путь, которому нужно пожертвовать только разрешением change . В шаблоне администратора change_form.html я проверяю как добавить , так и изменить разрешения в шаблоне и отображать submit_row только если пользователь имеет оба разрешения. Таким образом, пользователи с разрешением на изменение могут просматривать только change_list и change_form, но никогда не видят кнопок для отправки изменений, которые они сделали.

Изменения, которые я сделал:

  • Создайте каталог в каталоге шаблонов моих приложений, например myapp/templates/admin/myapp/
  • Ввести change_form.html в каталог
  • Заменить

    {% block submit_buttons_bottom %}{% submit_row %}{% endblock %}

с

{# Use change permission only as read only #}
{% if has_change_permission and has_add_permission %}
{% block submit_buttons_bottom %}{% submit_row %}{% endblock %}
{% endif %}

Это далеко не чисто и все же позволяет пользователю изменять данные, если предлагаются другие способы, кроме стандартной формы администратора, но, возможно, этого достаточно, если вы просто хотите защитить персонал от случайного изменения данных, которые они не должны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...