Di recente ho integrato in superset con la mia applicazione web, in modo che quando un utente viene autenticato dalla mia applicazione web in grado di entrare in superset e visualizzare/modificare/creare cruscotti in base al proprio ruolo solo cliccando il link senza bisogno di login. Per fare questo ho dovuto bypassare il login per cui ho fatto riferimento in questo articolo.
Personalizzato SecurityManager ho usato per bypassare il login
class CustomAuthDBView(AuthDBView):
@expose('/login/', methods=['GET', 'POST'])
def login(self):
redirect_url = self.appbuilder.get_url_for_index
user_name = request.args.get('username')
user_role = request.args.get('role')
if user_name is not None:
user = self.appbuilder.sm.find_user(username=user_name)
if not user:
role = self.appbuilder.sm.find_role(user_role)
user = self.appbuilder.sm.add_user(user_name, user_name, 'last_name', user_name + "@domain.com", role, password = "password")
if user:
login_user(user, remember=False)
return redirect(redirect_url)
else:
print('Unable to auto login', 'warning')
return super(CustomAuthDBView,self).login()
class CustomSecurityManager(SupersetSecurityManager):
authdbview = CustomAuthDBView
def __init__(self, appbuilder):
super(CustomSecurityManager, self).__init__(appbuilder)
Quindi, secondo il codice di cui sopra tramite url http://localhost:8088/login?username=John
l'utente potrà accedere Giovanni internamente o se l'utente John non esiste account è stato creato con un ruolo che è in base al ruolo dell'utente nella mia applicazione web
Ora il problema è che chiunque può immaginare questo url http://localhost:8088/login?username=USER_NAME
può creare il proprio account in superset, così come proteggere o sicuro di questo '/login'
endpoint