LoginSignup
10
3

More than 3 years have passed since last update.

Redashのダッシュボード変更権限を付与

Last updated at Posted at 2020-11-19

Redashのダッシュボードやクエリは、adminや所有者以外に変更することができません。
これは、同じグループに所属していようが変わりません。

個別のユーザに変更権限を付与することはできるので、その方法を記載します。

環境

Redash 8.0.0+b32245 (a16f551e)

仕組み

Redash の access_permissions テーブルにレコードを追加することで実現できます。
PostgreSQLを直接触るのは嫌なので、 AccessPermission.grant を使うことでレコードを追加します。

ここでやること

あるユーザ(old_user)が保持するダッシュボードの変更権限を別のユーザ(new_user)へ付与する。

やりかた

Redash で shell を開く。

/opt/redash
docker-compose exec server ./manage.py shell

以下をコピペする。

#
# ./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()

grantorをnew_userにしているが深い意味はない。
https://github.com/getredash/redash/blob/004bc7a2ac0de041907ab0b9b560151ea7057332/redash/models/users.py#L332

ちなみに

クエリも前述したものと同等のことで実現することができる。
また、設定(/settings/organization)よりEnable experimental multiple owners supportを有効にすることで、クエリの編集画面よりユーザに権限付与することができる。

10
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
3