Skip to content

Instantly share code, notes, and snippets.

@d9k
Created January 13, 2022 07:44
Show Gist options
  • Save d9k/a638071ce7146ef01c27779a51d96f2b to your computer and use it in GitHub Desktop.
Save d9k/a638071ce7146ef01c27779a51d96f2b to your computer and use it in GitHub Desktop.
Superset welcome page redirect
import logging
import pprint
from flask import Flask, redirect
from flask_appbuilder import expose, IndexView
from superset.typing import FlaskResponse
logger = logging.getLogger()
logger.warn("Loading config override for Uniweb");
WELCOME_PAGE_REDIRECT_ADMIN="/superset/dashboard/1/"
WELCOME_PAGE_REDIRECT_DEFAULT="/dashboard/list/"
WELCOME_PAGE_REDIRECT_BY_ROLE={
'Test': '/superset/dashboard/2/',
}
# Change welcome page
# https://stackoverflow.com/a/69930056/1760643
class SupersetDashboardIndexView(IndexView):
@expose("/")
def index(self) -> FlaskResponse:
from superset.views.base import is_user_admin, get_user_roles
user_roles = get_user_roles()
logger.warn('__DEBUG__ user roles: ' + pprint.pformat(user_roles))
if is_user_admin():
return redirect(WELCOME_PAGE_REDIRECT_ADMIN)
else:
for role in user_roles:
role_name = role.name
if role_name in WELCOME_PAGE_REDIRECT_BY_ROLE:
return redirect(WELCOME_PAGE_REDIRECT_BY_ROLE[role_name])
return redirect(WELCOME_PAGE_REDIRECT_DEFAULT)
FAB_INDEX_VIEW = f"{SupersetDashboardIndexView.__module__}.{SupersetDashboardIndexView.__name__}"
@floriandeutsch89
Copy link

"Getting too many redirect errors" 4.1.1. version. Plz help

Works like this:

# redirect by user
import logging
import pprint
from flask import redirect, g, request
from flask_appbuilder import expose, IndexView

from superset import security_manager
from superset.extensions import appbuilder
from superset.utils.core import get_user_id
from superset.superset_typing import FlaskResponse

logger = logging.getLogger()

class SupersetIndexView(IndexView):
    @expose("/")
    def index(self) -> FlaskResponse:
        if not g.user or not get_user_id():
            # Steps for anonymous user
            return redirect("/login")

        # Steps for authenticated user
        user_roles = security_manager.get_user_roles()
        logger.warning('__DEBUG__ user roles: %s', pprint.pformat(user_roles))

        for role in user_roles:
            role_name = role.name
            #logger.warning('__DEBUG__ role: %s', pprint.pformat(role))

            if role_name == "CUSTOM_ROLE":
                return redirect("/dashboard/1")

        # Default redirect if no specific role matched
        return redirect("/dashboard/list")

FAB_INDEX_VIEW = f"{SupersetIndexView.__module__}.{SupersetIndexView.__name__}"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment