チャンネルのための権限

権限

ユーザーがアクセス可能なチャンネルデータを確認する必要があります。基準はシンプルです。

  • チャンネルのメンバーなら誰でも、そのチャンネルに関するデータを読み取れる必要があります。

これは、チャンネルテーブルでレコードにアクセスしようとしている人はチャンネル channel_members.user_id = X-Hasura-User-Id のメンバーである必要があることを示す典型的なブール式です

行レベル選択

上記のステートメントの拡張された有効なブール式は、以下のようになります。

{
"channel_members": {
"user_id": {
"_eq": "X-Hasura-User-Id"
}
}
}

列レベル選択

ユーザーがアクセスすると想定される行を除外した後、読み取りが許可されるフィールドを除外する必要があります。特定のタイプのユーザーのみに制限する必要がある機密データはないため、すべての列に選択する権限を与えます。

読み取りアクセスが完了しました。次に、ユーザーがチャンネルを作成、更新、または削除できる書き込みアクセスを紹介します。

権限を挿入する

アプリのユーザーは、channel テーブルに直接挿入できますか?はい。所有者または管理者である認証されたユーザーは、自分でチャンネルを作成できます。ただし、自分が参加しているワークスペースでのみチャンネルを作成できます。以下の式に変換します。

{
"_and": [
{
"workspace": {
"workspace_members": {
"user_id": {
"_eq": "X-Hasura-User-Id"
}
}
}
},
{
"workspace": {
"workspace_members": {
"user_type": {
"type": {
"_in": [
"owner",
"admin"
]
}
}
}
}
}
]
}

_and ブール式を使用して、両方の条件を満たす必要があることを示します。user_typeテーブルは、値 owneradmin、および member を持つ列挙です。ワークスペースの所有者と管理者の両方は、チャンネルを作成できるため、上記の式も作成できます。

列プリセット

チャンネルテーブルでは、created_by は自動的にセッション変数 X-Hasura-User-Id に設定されるべきで、ユーザーにこの値の設定を許可してはなりません。この場合、列プリセットを使用します。

権限

channel テーブル内の既存のデータを更新できるのは誰ですか?

アプリの認証されたユーザーとワークスペースの所有者または管理者にのみ、ワークスペース内のデータの更新を許可する必要があります。

行レベル更新

上記の条件は、以下の式(上記と同じ)に変換します。

{
"_and": [
{
"workspace": {
"workspace_members": {
"user_id": {
"_eq": "X-Hasura-User-Id"
}
}
}
},
{
"workspace": {
"workspace_members": {
"user_type": {
"type": {
"_in": [
"owner",
"admin"
]
}
}
}
}
}
]
}

列レベル更新

ユーザーがアプリから直接更新できる列を修正する必要があります。チャンネルの公開ステータスと名前(is_publicname)のみ変更できるようにします。

権限を削除する

ワークスペースの所有者と管理者を、そのチャンネルを削除できる唯一のユーザーとします。再度、上記のブール式(挿入および更新と同じ)に変換します。

チャンネルが削除された場合、他のすべてのテーブル内のすべての依存レコードも削除する必要があります。そのため、これは、クライアントからのチャンネルの直接削除を許可するのでなく、サーバー側の管理者ロールによる単一の操作として実行できます。もう1つのオプションは、ON DELETEトリガーを使用して、データベース全体のすべての依存行を削除するカスケード削除を実行することです。

Did you find this page helpful?
Start with GraphQL on Hasura for Free
  • ArrowBuild apps and APIs 10x faster
  • ArrowBuilt-in authorization and caching
  • Arrow8x more performant than hand-rolled APIs
Promo
footer illustration
Brand logo
© 2024 Hasura Inc. All rights reserved
Github
Titter
Discord
Facebook
Instagram
Youtube
Linkedin