Skip to content

get_user_data doesn't return the users' roles but it could if we added info from the kc access token in addition to the id token #48

Description

@andre996

Description:

The get_user_data method returns less information on DE5 compared to DE4, part of the information that is missing is the users' roles is_admin, which developers use to define what to show to each user.

DE5:
Image

DE4:
Image

Solution:
Return the user roles( is_admin)

Workaround code:

from dash_enterprise_libraries import EnterpriseDash, ddk
from dash import dcc, Input, Output
import jwt
from flask import request
import base64
import os
from jwt import PyJWKClient

app = EnterpriseDash(__name__)

server = app.server

jwks_url = os.getenv('DASH_JWKS_URL','')
jwks_client = PyJWKClient(jwks_url)
public_key = jwks_client.get_signing_keys()[0].key

def get_user_data(request):

    jwt_token = base64.b64decode(request.cookies['kcToken']).decode('utf-8')
    decoded_token = jwt.decode(jwt_token, public_key, algorithms=["RS256"], audience="account") #, audience='Dash'
    return decoded_token



app.layout = ddk.App(
    [
        ddk.Card(
            [
                dcc.Dropdown(
                    id="continent-dropdown-schedule-example",
                    options=["Asia", "Europe", "Africa", "Americas", "Oceania"],
                    value="Europe",
                ),
                dcc.Markdown(id="refresh-time")            
                ]
        )
    ]
)



@app.callback(
    Output("refresh-time", "children"),
    Input("continent-dropdown-schedule-example", "value"),
)
def update_output(selected_continent):
    decoded_token =  get_user_data(request)
    role = decoded_token["resource_access"]["dash"]["roles"]
    markdown_text = f"""User role: {role} 
                        \n Token info:{decoded_token}"""

    return  markdown_text


if __name__ == "__main__":
    app.run(debug=True)

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions