колба-прицел создает маршрут управления UI using app.add_url_rule. Желая применить некоторые правила контроля доступа, я завернул его так:Правильный способ защиты управления флагом-дозорным устройством
from flask.ext import sentinel
def requires_auth(fn):
@wraps(fn)
def decorated(*args, **kwargs):
roles = []
if 'user' in session and 'roles' in session['user']:
roles = session['user']['roles']
if 'admin' not in roles:
flash("Not enough power")
return redirect('/')
return fn(*args, **kwargs)
return decorated
sentinel.views.management = requires_auth(sentinel.views.management)
sentinel.ResourceOwnerPasswordCredentials(app)
Вопрос заключается в том, действительно ли это так, или есть более подходящий способ?
EDIT: Понял, что мой вопрос был довольно абстрактным и на самом деле просто о колбе вместо часового. Угадайте, о чем я хотел спросить: «Есть ли еще более декларативный способ применения ограничений безопасности к путям в Flask, вместо того, чтобы каждый из них регистрировать каждый зарегистрированный маршрут?» После небольшого изучения это, похоже, обеспечивает гибкий контроль безопасности, который я искал.
from flask import Flask, request
app = Flask('bla')
PATH_ROLES = {
'/admin/.*': ['admin']
}
@app.before_request
def before_request():
try:
rule = next(x for x in PATH_ROLES if re.match(x, request.path))
print "path requires: ", PATH_ROLES[rule]
except StopIteration: pass
Да, это просто показалось хакерским, применяя декоратор программным способом, а не как объявление к виду. Попытка использовать некоторые другие подходы, спасибо за обзор, хотя. :) – stt