ra-supabase 如何访问 usePermissions

问题描述 投票:0回答:1

我正在尝试按照[文档](https://marmelab.com/react-admin/Permissions.html)获得仅某些使用supabase的用户可用的资源之一。

但是,当我查看 authProvide.ts 来检查 supabaseAuthProvider 时,我可以看到该钩子的行是空的(在 node_module/ra-supabase-core/src 中)

file located at: 
node_module/ra-supabase-core/src/authProvider.ts


export const supabaseAuthProvider = (
    client: SupabaseClient,
    { getIdentity, redirectTo }: SupabaseAuthProviderOptions
): SupabaseAuthProvider => {
    return {
        async login(params) {
            // some code here
        },

        // other functions here
        
        async getPermissions() {
            return;
        },
        async getIdentity() {
           // some code here
        },
    };
};

这是否意味着 SUPABASE(还?)不支持 getPermissions() ?我应该复制该文件的内容并用作我自己的自定义 authProvider,添加缺少的代码吗?

非常感谢

编辑 还在四处寻找,今天我发现的是

//src/AuthProvider.jsx

import { supabaseAuthProvider } from 'ra-supabase'
import { supabaseClient } from './supabaseClient'

export const authProvider = supabaseAuthProvider(supabaseClient, {
  getIdentity: async (user) => {
    const { data, error } = await supabaseClient
      .from('profiles')
      .select('id, name, apelido')
      .match({ email: user.email })
      .single()

    if (!data || error) {
      throw new Error()
    }

    return {
      id: data.id,
      fullName: `${data.name} ${data.apelido}`,
    }
  },
  getPermissions: async () => {
    console.log('getPermissions')
    const user = supabaseClient.auth.user()
    return user ? user.app_metadata.groups : []
  },
})

即使 getIdentity 运行良好,我也从未从 console.log 获取 getPermissions,这正常吗?

谢谢

permissions react-admin supabase authprovider
1个回答
0
投票

首先,到目前为止你必须自己实现

getPermissions
方法,但幸运的是有 pull request 来增强这一点。

其次,正如文档所解释的那样,React-admin 默认情况下不使用权限,但它提供了

usePermissions
钩子来检索当前用户的权限。这意味着您将通过调用
usePermissions
挂钩在控制台中看到您的日志。

希望这有帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.