Recent m-am integrat superset cu cererea mea de web, astfel încât atunci când un utilizator care este autentificată de către cererea mea de web pot intra superset și a vizualiza/edita/crea tablouri de bord în funcție de rolul lor doar făcând clic pe link-ul nici măcar nu trebuie să te autentifici. Pentru a face acest lucru a trebuit să ocolească login pentru care m-am referit în acest articol.
Personalizat SecurityManager am folosit pentru a ocoli conectare
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)
Deci, în conformitate cu codul de mai sus folosind url-ul http://localhost:8088/login?username=John
va autentifica utilizatorul John intern sau dacă utilizatorul John nu exista contul este creat cu un rol care este în funcție de rolul utilizatorului în aplicația web
Acum problema este cine poate ghici acest url http://localhost:8088/login?username=USER_NAME
puteți crea un cont în superset, deci, cum pentru a proteja sau asigura acest lucru '/login'
endpoint