альтернативная модель разрешений с repoze.what

#python #authentication #authorization #web-frameworks

#python #аутентификация #авторизация #веб-фреймворки

Вопрос:

Я пишу веб-приложение, и я хотел бы использовать repoze.what amp; repoze.who для обработки моей авторизации и аутентификации. Проблема в том, что repoze.what кажется жестко запрограммированным для принятия определенной модели разрешений, то есть:

  • Посетителями сайта являются либо зарегистрированные пользователи, либо анонимные.
  • Учетные записи пользователей принадлежат к 0 или более группам.
  • С группами связано 0 или более разрешений.

Так, например, вашими разрешениями могут быть ‘can-post-article’ и ‘can-post-comment’, а вашими группами могут быть ‘author’, ‘visitor’, где ‘author’ может как публиковать статьи, так и оставлять комментарии, в то время как посетители могут оставлять только комментарии.

Эта модель, вероятно, работает для большинства сайтов. Однако мой сайт позволяет командам сотрудничать друг с другом на разных уровнях. Итак, модель безопасности, которая мне нужна, это:

  • Посетителями являются либо зарегистрированные пользователи, либо анонимные.
  • Пользователи являются членами 0 или более групп.
  • Для каждой группы, членом которой является пользователь, это членство будет иметь разные разрешения. Например, пользователь может быть «автором» или группой A, но «комментатором» в группе B.

Количество групп со временем будет меняться, и членство в этих группах также изменится. Я не вижу никакого простого способа интегрировать эту модель разрешений в repoze.what . Я упускаю что-то очевидное?

Ответ №1:

Ну, вы могли бы легко создать группу «Group_A_commenter» и группу «Group_B_editor». Их не обязательно генерировать вручную. 🙂 Ваша модель на самом деле просто заключается в группировании групп.

Но вы также должны уметь создавать средства проверки предикатов, которые реализуют ваши правила.

http://what.repoze.org/docs/1.0/Manual/Predicates/index.html#term-predicate

Ответ №2:

После небольшой возни у меня есть ответ.

Ответ заключается в том, что единственная причина использовать схему аутентификации, предложенную в репозитории.в какой документации указано, что если вы это сделаете, вы сможете использовать их предикаты бесплатно. К счастью, написание и использование собственных предикатов — это проще простого. Мне кажется, что единственное жесткое требование — это пользовательский объект (хотя, очевидно, вы можете называть это как угодно). В моем приложении у меня есть куча пользовательских предикатов, которые проверяют определенные вещи, такие как:

  • Является ли пользователь членом этой группы? (группа, указанная параметром)
  • Пользователь вошел в систему?
  • Выполняет ли пользователь эту конкретную роль сайта?

Затем я могу использовать эти предикаты везде, где захочу.