Отказ от ответственности: я новичок в правилах django и django.
Я определил свою модель. Модель имеет 2 внешних ключа к пользовательской таблице. Создатель и руководитель. Экземпляры должны изменяться / обновляться персоналом, создателем или руководителем.
Я определил предикаты для is_creator и is_supervisor и создал правило:
@rules.predicate
def is_creator(user, mymodel):
return mymodel.creator == user
@rules.predicate
def is_supervisor(user, mymodel):
return mymodel.supervisor == user
can_edit = is_supervisor | is_creator | rules.is_staff
А в метаклассе моделей я добавил:
rules_permissions = {
'change': can_edit
}
На мой взгляд, я хочу показать кнопку редактирования, которая ссылается на редактирование формы на основе этих разрешений.
{% block content %}
{% has_perm 'mymodel.change_mymodel' user instance as can_edit %}
{% if can_edit %}
<button type="button" class="btn btn-warning"><h6>Edit</h6></button>
{% endif %}
{% endblock %}
Когда я вхожу как суперпользователь, кнопка отображается как и ожидалось. Когда я использую тестового пользователя, который должен иметь возможность редактировать указанный экземпляр c, кнопка вообще не отображается. Так что сделаны определенные проверки, но не так, как ожидалось.
У меня есть вторая похожая функциональность для страницы индекса. Отображение только действий, для которых пользователи имеют привилегии. Опять же, суперпользователь видит все это, а тестовый пользователь - нет.
В этом случае ниже приведен предикат, который используется как разрешение «добавить» в другой модели:
@rules.predicate
def can_add_xyz(user):
return rules.is_staff | rules.is_group_member("Add_XYZ")
Кажется, в обоих случаях все проверки, кроме is_staff, кажутся неудачными. Что я делаю не так?