123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- # pylint: disable=C,R,W
- from collections import defaultdict
- from flask import g
- from flask_appbuilder.security.sqla import models as ab_models
- from superset import db
- def bootstrap_user_data(username=None, include_perms=False):
- if username:
- username = username
- else:
- username = g.user.username
- user = (
- db.session.query(ab_models.User)
- .filter_by(username=username)
- .one()
- )
- payload = {
- 'username': user.username,
- 'firstName': user.first_name,
- 'lastName': user.last_name,
- 'userId': user.id,
- 'isActive': user.is_active,
- 'createdOn': user.created_on.isoformat(),
- 'email': user.email,
- }
- if include_perms:
- roles, permissions = get_permissions(user)
- payload['roles'] = roles
- payload['permissions'] = permissions
- return payload
- def get_permissions(user):
- if not user.roles:
- raise AttributeError('User object does not have roles')
- roles = {}
- permissions = defaultdict(set)
- for role in user.roles:
- perms = set()
- for perm in role.permissions:
- if perm.permission and perm.view_menu:
- perms.add(
- (perm.permission.name, perm.view_menu.name),
- )
- if perm.permission.name in ('datasource_access',
- 'database_access'):
- permissions[perm.permission.name].add(perm.view_menu.name)
- roles[role.name] = [
- [perm.permission.name, perm.view_menu.name]
- for perm in role.permissions
- if perm.permission and perm.view_menu
- ]
- return roles, permissions
|