Перезапись правил Django не применяется
Мы используем абстрактный класс модели, чтобы установить некоторые базовые правила, которые должны быть переписаны реальными моделями в Django ( более подробно в предыдущем вопросе). В данном случае большинство классов имеют типичный сценарий использования, поэтому они наследуют те же разрешения от базового класса, но в случае с образцовым Ticket
следует добавить предикат is_public
.
class BaseModel(RulesModel):
...
class Meta:
abstract = True
@classmethod
def preprocess_rules_permissions(cls, perms):
perms.update({
"can_create": can_create_in_company | is_superuser,
"can_view": can_view_in_company | is_author | is_superuser,
})
class Ticket(BaseModel):
...
@classmethod
def preprocess_rules_permissions(cls, perms):
perms.update({
"can_view": can_view_in_company | is_author | is_superuser | is_public,
})
При реализации этого метода предикат не применяется при попытке получить доступ к публичному билету. Все ли правила перезаписываются методом update, или мы можем обновить только один предикат? Даже при добавлении оператора print
в препроцесс Tickets
он не выполняется, так что перезапись, очевидно, не работает. В документации ничего не говорится об этом.