[PYTHON] Accorder l'autorisation de modification du tableau de bord Redash

Les tableaux de bord et requêtes Redash ne peuvent être modifiés que par l'administrateur ou le propriétaire. Peu importe si vous appartenez au même groupe.

Puisqu'il est possible d'accorder une autorisation de modification à des utilisateurs individuels, nous décrirons comment procéder.

environnement

Redash 8.0.0+b32245 (a16f551e)

Comment ça fonctionne

Ceci peut être réalisé en ajoutant un enregistrement à la table access_permissions de Redash. Je ne veux pas toucher PostgreSQL directement, donc j'ajoute un enregistrement en utilisant AccessPermission.grant.

Que faire ici

Accordez l'autorisation de modification du tableau de bord détenue par un utilisateur (ancien_utilisateur) à un autre utilisateur (nouvel_utilisateur).

Comment faire

Ouvrez le shell dans Redash.

/opt/redash


docker-compose exec server ./manage.py shell

Copiez et collez ce qui suit.

#
# ./manage.py shell
#
from redash.models.users import AccessPermission, User
from redash.models.base import db
from redash.models import Dashboard
from redash import permissions

from contextlib import contextmanager

old_user = User.get_by_id(5)
new_user = User.get_by_id(2)

def grant_dashboards():
    all_dashboards = Dashboard.all(
        old_user.org,
        old_user.group_ids,
        old_user.id,
    )
    not_exists_dashboards = not_exists_obj(all_dashboards)
    grant(not_exists_dashboards)

def not_exists_obj(objects):
    return [
        obj for obj in objects
        if not AccessPermission.exists(obj, permissions.ACCESS_TYPE_MODIFY, new_user)
    ]

@contextmanager
def grant(objects):
    try:
        for obj in objects:
            # !!! grantee == grantor
            AccessPermission.grant(obj, permissions.ACCESS_TYPE_MODIFY, new_user, new_user)
        db.session.commit()
    except Exception:
        db.session.rollback()
        raise

grant_dashboards()

Le concédant est défini sur new_user, mais il n'y a pas de signification profonde. https://github.com/getredash/redash/blob/004bc7a2ac0de041907ab0b9b560151ea7057332/redash/models/users.py#L332

Au fait

La requête peut également être réalisée par la même chose que celle décrite ci-dessus. De plus, en activant Activer la prise en charge expérimentale de plusieurs propriétaires dans les paramètres ( / settings / organization), vous pouvez accorder des autorisations à l'utilisateur à partir de l'écran d'édition de la requête.

Recommended Posts

Accorder l'autorisation de modification du tableau de bord Redash
Commande de changement d'autorisation et de propriété [Linux]