django


Давайте поговорим о безопасности.

Существует два самых распространенных подхода к описанию ограничений доступа в информационных системах. Первый — нельзя ничего, кроме функций, явно указанных как разрешенные. Второй — можно все, кроме явно запрещенного. Ни один из подходов не является однозначно лучшим, выбирать нужно в зависимости от особенностей конкретной системы. Если оная состоит преимущественно из публичной части, то удобнее описывать политику доступа через ограничения. Если публичная часть мала, а основное взаимодействие происходит с зарегистрированными пользователями — описываем, наоборот, через набор разрешений. Ну и еще имеет значение то, в какую сторону в данной системе страшнее ошибиться — что-то лишнее разрешить или запретить.

Проблема

Какое отношение все это имеет к Django? Наша команда в настоящий момент разрабатывает систему, в которой почти весь функционал предназначен для зарегистрированных пользователей.

В текущем версии фрэймворк не особо помогает нам с описанием прав доступа (да и в 1.1 не обещают улучшений по этой части). А именно – доступен только запретительный механизм описания, осуществляемый через навешивание на view-функции декоратора login_required

Примерно так:

from django.contrib.auth.decorator import login_required

@login_required # Доступ ограничен
def some_view(requests):
   # blah-blah-blah

# Доступ свободный
def other_view(requests):
   # blah-blah-blah

Во всей красе проявляются недостатки такого подхода — нужно вешать декоратор на 90% представлений. Плюс к тому, всегда есть риск получить неочевидную дыру в безопасности системы, если забыть поставить декоратор.

Решение

В рамках стремления к лучшему и концепции “сделай сам” разработан способ описывать права через набор разрешений.

from middleware.security import public

# Доступ ограничен, как если бы стоял login_required
def some_view(requests):
   # blah-blah-blah

@public # Доступ свободный
def other_view(requests):
   # blah-blah-blah

Инструкция по установке

  1. Скачиваем модуль security.py и кладем его куда-нибудь. У нас это директория middleware, общая для всех приложений.

  2. В настойках добавляем NonpublicMiddleware

    MIDDLEWARE_CLASSES = (
        ...,
        'middleware.security.NonpublicMiddleware', 
    )
    
  3. По необходимости правим функцию is_public, чтобы изменить логику определения известных публичных view (сейчас это все, находящееся в пакете django, за исключением django.views.generic)

  4. Все, можно пользоваться.

security.py

Вакансии закрыты, спасибо всем откликнувшимся!


В связи с повышением спроса со стороны потенциальных заказчиков, мы объявляем набор веб-разработчиков.

Нас 3 человека, находимся в Тольятти, работаем в области аутсорсинга около 5 лет. Клиенты из США, Канады, Европы. Как фирма не оформлены, планируем сделать это в ближайшем будущем. В данный момент нам нужно еще 2-3 разработчика.

Занимаемся разработкой веб-систем на заказ с использованием наиболее современных технологий. На сегодняшний день — Django и Ruby on Rails.

Основные требования

  • Общий опыт работы от 2-3 лет

  • Опыт веб-разработки, выражающийся в понимании HTTP, HTML, CSS, javascript

  • Владение хотя бы 2-мя высокоуровневыми языками программирования

  • Хороший письменный английский

Приветствуется

  • Python, Ruby

  • SQL

  • Django, Ruby on Rails

  • Опыт работы на *nix-системах

  • Опыт написания юнит-тестов, test-driven development

  • Опыт использования систем управления версиями и багтреккинга (мы используем Mercurial и Trac соответственно).

Условия

Готовы платить 2000 долларов в месяц подходящему нам человеку, который сможет адекватно встроиться в коллектив, и давать результат на уровне среднего по команде. Тем, кто знает и умеет меньше, чем мы, первое время будем платить меньше. Поднимать по мере обучения тоже будем, целевой уровень все те же 2000. Нижняя граница стартовой суммы находится где-то в районе 1400, меньше подходящий нам кандидат, вероятно, не стоит. Валюта оплаты зависит от конкретного проекта, обычно это доллары США.

Работа дома. Организуете свое рабочее место своими силами и за свой счет.

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

Тем не менее, мы ожидаем работы на полную ставку, 40 часов в неделю. Формального учета рабочего времени нет, контроллируем по результатам.

Дополнение

Нужно будет 1-2 раза в неделю встречаться лично, поэтому совсем удаленная работа нам не подойдет, нужно чтобы вы находились в Тольятти или окрестностях.


В качестве первого шага присылайте ваше резюме или портфолио.

Со мной можно связаться по почте (me [собака] alexlebedev.com) или ICQ (160365425).

– Александр Лебедев

Next Page »