Новое:Talanto осенью: фильтры с числами, отклик по шагам и каталог компаний

+1 199новых вакансий за сутки·93 838вакансий открыто сейчас·Новое:Talanto осенью: фильтры с числами, отклик по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 273
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: фильтры с числами, отклик по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 409 кандидатов открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 222
  • Облачные технологии14 171
  • QA вакансии3 456
  • Backend вакансии2 114
  • Инженер данных1 801
  • Продакт-менеджер1 247

Разработка

  • Android1 858
  • iOS1 698
  • Fullstack вакансии997
  • AI вакансии955
  • Frontend вакансии755
  • Mobile вакансии44

По стеку

  • Go8 752
  • Java6 593
  • Node.js2 036
  • .NET1 739
  • Kotlin1 618
  • Rust1 472
  • C#717
  • PHP690
  • C++579

DevOps и инфраструктура

  • Kubernetes7 787
  • DevOps вакансии6 095
  • Linux-инфраструктура5 508
  • Terraform / IaC4 287
  • CI/CD3 272
  • Мониторинг и Observability1 792
  • SRE566
  • Кибербезопасность454

Аналитика и данные

  • Data Scientist1 138
  • Бизнес-аналитик921
  • Аналитик данных858
  • Системный аналитик154

Другие направления

  • Проджект-менеджер624
  • UI/UX дизайн149
  • Ручное тестирование14

По регионам

  • Вакансии в США44 166
  • Вакансии в Европе24 014
  • Вакансии в Канаде4 535
  • Работа в России3 867

По формату

  • Удалённые вакансии75 005
  • Релокация в США44 166
  • Гибридная работа12 485
  • Офисная работа7 090

По уровню

  • Senior вакансии42 643
  • Middle вакансии20 960
  • Junior вакансии6 708

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis38 вакансий
  • Spotify37 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме DjangoВсе вопросы
DjangoMiddleТеория

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

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Django создаёт 4 разрешения (add/change/delete/view) для каждой модели. Кастомные права задаются через Meta.permissions. Объектные разрешения реализуются через кастомный authentication backend или библиотеку django-guardian.

Встроенные разрешения

При выполнении migrate Django автоматически создаёт 4 разрешения для каждой модели: add_modelname, change_modelname, delete_modelname, view_modelname.

# Проверка разрешений на объекте пользователя:
user.has_perm("myapp.view_article")   # bool
user.has_perms(["myapp.add_article", "myapp.change_article"])

# В шаблоне:
# {% if perms.myapp.delete_article %}
#   <button>Удалить</button>
# {% endif %}

Система прав доступа Django

Django поставляется с встроенной системой разрешений, основанной на трёх понятиях: Permission (разрешение), Group (группа) и методах проверки на объекте пользователя.

Назначение разрешений

from django.contrib.auth.models import User, Permission
from django.contrib.contenttypes.models import ContentType
from myapp.models import Article

content_type = ContentType.objects.get_for_model(Article)
perm = Permission.objects.get(content_type=content_type, codename="change_article")

user = User.objects.get(username="editor")
user.user_permissions.add(perm)

# Через группу:
from django.contrib.auth.models import Group
editors = Group.objects.get(name="Editors")
editors.permissions.add(perm)
user.groups.add(editors)

Декораторы и миксины во View

from django.contrib.auth.decorators import login_required, permission_required
from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
from django.views.generic import UpdateView

# FBV:
@login_required
@permission_required("myapp.change_article", raise_exception=True)
def edit_article(request, pk):
    ...

# CBV:
class ArticleUpdateView(PermissionRequiredMixin, UpdateView):
    permission_required = "myapp.change_article"
    model = Article
    fields = ["title", "body"]

Кастомные разрешения

Объявляйте через Meta.permissions:

class Article(models.Model):
    title = models.CharField(max_length=200)
    author = models.ForeignKey(
        "auth.User", on_delete=models.CASCADE
    )

    class Meta:
        permissions = [
            ("publish_article", "Can publish article"),
            ("feature_article", "Can mark article as featured"),
        ]

После makemigrations + migrate разрешения доступны как myapp.publish_article.

Объектные разрешения (object-level permissions)

Встроенная система проверяет разрешения на уровне модели, не объекта. Для объектных разрешений используйте django-guardian:

pip install django-guardian
# settings.py
INSTALLED_APPS += ["guardian"]
AUTHENTICATION_BACKENDS = [
    "django.contrib.auth.backends.ModelBackend",
    "guardian.backends.ObjectPermissionBackend",
]

# Назначение:
from guardian.shortcuts import assign_perm, remove_perm, get_objects_for_user

article = Article.objects.get(pk=1)
assign_perm("myapp.change_article", user, article)   # только для этого объекта
user.has_perm("myapp.change_article", article)        # True
user.has_perm("myapp.change_article")                 # False (нет общего права)

# QuerySet объектов, на которые есть право:
articles = get_objects_for_user(user, "myapp.change_article")

Кастомный бэкенд аутентификации для своей логики

# myapp/backends.py
class ArticleOwnerBackend:
    def authenticate(self, request, **kwargs):
        return None  # не аутентифицируем, только авторизуем

    def has_perm(self, user_obj, perm, obj=None):
        if perm == "myapp.change_article" and obj is not None:
            return obj.author_id == user_obj.pk
        return False

# settings.py
AUTHENTICATION_BACKENDS = [
    "django.contrib.auth.backends.ModelBackend",
    "myapp.backends.ArticleOwnerBackend",
]

Подводные камни

  • Разрешения пользователя кэшируются на объекте user внутри запроса. После user.user_permissions.add() вызовите user = User.objects.get(pk=user.pk) или очистите user._perm_cache, иначе проверка вернёт старое значение.
  • Superuser (is_superuser=True) получает все разрешения без проверки — не полагайтесь на ограничения для суперпользователя в тестах.
  • has_perm() с объектом всегда возвращает False с дефолтным бэкендом — нужен кастомный бэкенд или django-guardian.
  • Встроенные 4 разрешения создаются только при первом migrate после появления модели — если модель добавлена в обход миграций, разрешений нет.
  • permission_required по умолчанию редиректит на страницу логина, а не бросает 403 — передавайте raise_exception=True.
  • DRF использует свою систему permissions (IsAuthenticated, DjangoModelPermissions) — не путайте с Django permissions; их нужно явно связывать.
  • django-guardian добавляет дополнительные таблицы и JOIN при get_objects_for_user() — на больших данных нужен тщательный анализ производительности.

Частые вопросы на собеседовании

  • Как Django защищает от SQL-инъекций, CSRF и XSS-атак?
  • Как организовать настройки, secrets и environment-specific config без утечек?
  • Объясните жизненный цикл запроса/ответа в Django — от разрешения URL до HTTP-ответа.
  • Что такое проблема N+1 запросов в Django и как её обнаружить и исправить?

Типичные ошибки

  • Описывать permissions только как термин и не показывать механизм на минимальном примере.
  • Игнорировать ошибки, пустые данные, конкурентный доступ или границы транзакции.
  • Не связывать поведение с официальным контрактом Django и реальной эксплуатацией.

Что проверяет интервьюер

  • Объясняет permissions через последовательность действий, а не через набор ключевых слов.
  • Приводит короткий кодовый пример или production-сценарий с ожидаемым поведением.
  • Называет хотя бы один риск: производительность, безопасность, транзакции, память или сопровождение.

Как вы знаете этот вопрос?

Проверить себя по теме Django →

Источники

  • https://docs.djangoproject.com/en/5.2/topics/auth/default/
  • https://docs.djangoproject.com/en/5.2/topics/auth/customizing/

Связанные темы

Djangoapi-designtechnical-reasoning

Вакансии с этим навыком

  • Sr Software Engineer - Remote
  • Middle Python Developer
  • Staff Software Engineer
  • Software Engineer
  • Senior Software Engineer - Full Stack - Portal Platform