Как правильно делается контроль доступа к функционалу в Django?
Пишу проект, в котором зарегистрированный пользователь имеет 2 роли (клиент и исполнитель). У каждой роли свои задачи, поэтому многие разделы и ссылки могут различаться.
Частично я уже понял где я могу прямо в шаблоне создавать условия (например user.is_authenticated), или во view проверить роль и на основе этого выдать соответствующий шаблон (чтобы в нем ничего не городить). На гостя использую декоратор.
С усложнением системы понимаю, что будет недостаточно просто подставить нужный шаблон или спрятать ссылку, нужно контролировать всё на бекэнде (например не дать ИСПОЛНИТЕЛЮ смотреть страницу СОЗДАТЬ ЗАКАЗ, потому-что это не его роль.
Вопрос: как это лучше всего делать, какая best practice используется в данном случае?