Redashのダッシュボードやクエリは、adminや所有者以外に変更することができません。
これは、同じグループに所属していようが変わりません。
個別のユーザに変更権限を付与することはできるので、その方法を記載します。
環境
Redash 8.0.0+b32245 (a16f551e)
仕組み
Redash の access_permissions
テーブルにレコードを追加することで実現できます。
PostgreSQLを直接触るのは嫌なので、 AccessPermission.grant
を使うことでレコードを追加します。
ここでやること
あるユーザ(old_user)が保持するダッシュボードの変更権限を別のユーザ(new_user)へ付与する。
やりかた
Redash で shell を開く。
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
を有効にすることで、クエリの編集画面よりユーザに権限付与することができる。