1

我是新来的,我正在尝试了解如何控制目录条目的可见性和访问权限。例如,我想了解以下情况下目录 yaml 文件的外观,假设我有两个 csv 文件,我通过目录 yaml 文件与两个用户一起提供对它们的访问权限。如何让一个用户只看到一个 csv,而另一个用户可以看到这两个文件?或者我需要如何更改下面的 yml 文件来完成此操作?

metadata:
        version: 1
        description: "lattice data catalog"

sources:
        sample1:
            driver: csv
            args:
                 urlpath: test1.csv
        testcsv:
            driver: csv
            args:
                 urlpath: test2.csv    
     
4

1 回答 1

0

首先,让我们指定这是在 Intake 服务器的上下文中。您可以构建一个 YAML 目录驱动程序,它只能根据一些环境变量或其他信息向用户显示一些条目,但我们不会在这里考虑。

文档中给出了为服务器创建身份验证插件的一般大纲。在这种情况下,标头字符串将与单个静态密钥进行比较。在您的情况下,关键信息将由您的身份验证代理传递。您可以将用户与从外部来源提取的一些显式输入进行比较:

def allow_access(self, header, source, catalog):
    user = header.get("X-user-from-nginx", None)
    source_name = source.describe()['name']
    if source_name == "sample1":
        return user in ['user1', 'user2']
    if source_name == "sample2":
        return user in ['user2']
    return False

或者您可以将权限嵌入到目录中(这只有在使用给定身份验证通过您的服务器读取时才有意义)

sources:
  sample1:
    driver: csv
    args:
      urlpath: test1.csv
    metadata:
      allow_users: ["user1"]

带有身份验证插件

def allow_access(self, header, source, catalog):
    user = header.get("X-user-from-nginx", None)
    allowed = source.describe().get("metadata", {}).get('allow_users', [])
    return user in allowed
于 2020-06-26T14:12:49.043 回答