Nedávno jsem integrovaného nadmnožinou s mým webové aplikace tak, že když uživatele, který je ověřen moje webová aplikace může vstoupit nadřazený a zobrazit/editovat/vytvářet dashboardy založené na jejich roli jen kliknutím na odkaz není třeba ani přihlášení. Za tohle jsem musel obejít přihlášení, pro které jsem podle tohoto článku.
Vlastní SecurityManager jsem použil obejít přihlášení
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)
Takže podle výše uvedeného kódu pomocí url http://localhost:8088/login?username=John
bude přihlášení uživatele John interně, nebo pokud uživatel John neexistuje, je vytvořen účet s rolí, která je založena na roli uživatele v mé webové aplikace
Problém je, že někdo, kdo může odhadnout tuto adresu url http://localhost:8088/login?username=USER_NAME
můžete vytvořit svůj účet v superset, tak jak k ochraně nebo zajištění této '/login'
endpoint