ワークスペースのための権限
権限
Slackのログイン済みユーザーが読み取れるワークスペースデータはどれでしょうか?
- ワークスペースのメンバーなら誰でも、ワークスペースに関するデータを読み取れる必要があります。
これは、ワークスペーステーブルのレコードにアクセスしようとしている人は所有者 owner_id = X-Hasura-User-Id
でないといけないかまたは、同じワークスペース workspace_members.user_id = X-Hasura-User-Id
に参加している必要があることを示す典型的なブール式です。
行レベル選択
上記のステートメントの拡張された有効なブール式は、次のようになります。
{"_or": [{"owner_id": {"_eq": "X-Hasura-User-Id"}},{"workspace_members": {"user_id": {"_eq": "X-Hasura-User-Id"}}}]}
列レベル選択
ユーザーがアクセスすると想定される行を除外した後、読み取りが許可されるフィールドを除外する必要があります。特定のタイプのユーザーのみに制限する必要がある機密データはないため、すべての列に選択する権限を与えます。
読み取りアクセスが完了しました。次に、ユーザーが作成、更新、または削除できる書き込みアクセスを紹介します。
権限を挿入する
アプリのユーザーは、workspace
テーブルに直接挿入できますか?はい。認証されたユーザーなら誰でも、自分でワークスペースを作成できます。以下の式になります。
{"owner_id": {"_eq": "X-Hasura-User-Id"}}
列プリセット
挿入中に、静的な値またはセッション変数を、列のデフォルトの値として設定できます。
ワークスペーステーブルで、owner_idは自動的にセッション変数 X-Hasura-User-Id
に設定する必要があり、ユーザーにこの値の設定を許可してはなりません。この場合、列プリセットを使用します。
権限
workspace
テーブル内の既存のデータを更新できるのは誰ですか?
アプリの認証されたユーザーとワークスペースの所有者にのみ、ワークスペース内のデータの更新を許可します。
行レベル更新
上記の条件は、以下の式になります。
{"owner_id": {"_eq": "X-Hasura-User-Id"}}
列の owner_id
が認証されたユーザーのid値(X-Hasura-User-Id
)と一致する場合のみ、行を更新します
列レベル更新
ユーザーがアプリから直接更新できる列を修正する必要があります。そのため、ユーザーに id
、owner_id
、および created_at
値の更新を許可しないでください。残りの列は許可できます。
権限を削除する
ワークスペースの所有者は、ワークスペースを削除できる唯一のユーザーである必要があります。これも再度、以下の式に変換します。
{"owner_id": {"_eq": "X-Hasura-User-Id"}}
ワークスペースが削除された場合、他のすべてのテーブル内のすべての依存レコードも削除する必要があります。そのため、これは、クライアントからのワークスペースの直接削除を許可するのでなく、サーバー側の管理者ロールによる単一の操作として実行できます。もう1つのオプションは、ON DELETEトリガーを使用して、データベース全体のすべての依存行を削除するカスケード削除を実行することです。
- Build apps and APIs 10x faster
- Built-in authorization and caching
- 8x more performant than hand-rolled APIs