Защита от флагов, основных и флагов
Может ли кто-нибудь сказать, существует ли принципиальная разница между этими тремя расширениями или все они делают подобные вещи? Я читал документы и, похоже, довольно много кроссовера. Я предполагаю, что некоторые просто предлагают больше возможностей.
Я хочу добавить роли пользователя в свое приложение, чтобы определенные пользователи имели определенные разрешения. то есть пользователь уровня 1 может создать 5 ресурсов, пользователь уровня2 может создать 10 и т.д. Я смотрел на сворачивание собственного, это не кажется слишком сложным. Я смотрю на использование декоратора по линии этого http://flask.pocoo.org/snippets/98/ будут ли какие-либо проблемы с безопасностью с этим решением? Я уже использую Flask-login, поэтому я бы интегрировал его с этим.
Ответы
Ответ 1
Flask-Auth - это единственное решение как для проверки подлинности, так и для разрешений, но я не видел, чтобы он часто использовался/упоминался.
Flask-Principal будет делать то, что вы хотите, но это довольно голые кости; не будет работать больше.
Flask-Security сворачивает Flask-Login, -Principal и некоторые другие расширения в более последовательное целое, устанавливая их как зависимости. Используйте методы, которые он предоставляет, а не те, которые указаны в отдельных расширениях, когда это возможно. Я не использовал его, но похоже, что от этого потребуется много ручного труда.
Для вашего конкретного случая использования просто для добавления пользовательских ролей я бы рекомендовал придерживаться Flask-Principal. Он работает хорошо, поддерживается и достаточно общий для интеграции с любыми вашими требованиями.
Ответ 2
В общем, все они похожи, но некоторые из них имеют больше возможностей, чем другие. Например, Flask-Security очень тяжела с множеством дополнительных функций безопасности, таких как шифрование. Фактически, Flask-Security включает в себя подклассу Flask-Principal. Flask-Principal может использовать Flask-Login для auth, хотя это всего лишь один вариант. Таким образом, вы можете видеть, что все они связаны друг с другом, но некоторые из них являются подмножествами или надмножествами друг друга.
Теперь в вашем конкретном случае вы уже используете Flask-Login, который отлично. Если вам нужно добавить роли пользователя, которые Flask-Login не поддерживает, я рекомендую вам расширить свою модель пользователя, чтобы добавить столбец "Роли", а затем перезаписать декоратор login_required. Если вы попытаетесь использовать расширения, такие как Flask-Security и т.д., Это может быть излишним в вашей ситуации.
В качестве примера я расширю свой класс User с помощью поля role. Он может иметь значения "ЛЮБОЙ", "ADMIN" и т.д. ЛЮБОЕ средство не имеет значения.
class User(UserMixin):
def get_role():
return rolename
Затем я перезаписываю декоратор login_required как:
def login_required(role="ANY"):
def wrapper(fn):
@wraps(fn)
def decorated_view(*args, **kwargs):
if not current_user.is_authenticated():
return current_app.login_manager.unauthorized()
urole = current_user.get_role()
if ( (urole != role) and (role != "ANY")):
logout_user()
return current_app.login_manager.unauthorized()
return fn(*args, **kwargs)
return decorated_view
return wrapper