Кто-нибудь пытается реализовать Multi-Tenancy в Apache Superset - PullRequest
0 голосов
/ 13 июля 2020

Я пробовал клонировать из проекта Github, но у меня это не сработало. Есть ли другой способ добиться мультитенантности в расширенном наборе Apache. Пробовал из этого источника https://github.com/apache/incubator-superset/pull/3729/files/5a063f37d77efc0d4a50ba8406a62e8eee4964ed. Но мультитенантности я не добился. Я застрял с этими ошибками.

Traceback (most recent call last):
  File "C:\Users\ELCOT\AppData\Local\Programs\Python\Python36\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "C:\Users\ELCOT\AppData\Local\Programs\Python\Python36\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "D:\myfolder\my-superset\venv\Scripts\flask.exe\__main__.py", line 9, in <module>
  File "d:\myfolder\my-superset\venv\lib\site-packages\flask\cli.py", line 967, in main
    cli.main(args=sys.argv[1:], prog_name="python -m flask" if as_module else None)
  File "d:\myfolder\my-superset\venv\lib\site-packages\flask\cli.py", line 586, in main
    return super(FlaskGroup, self).main(*args, **kwargs)
  File "d:\myfolder\my-superset\venv\lib\site-packages\click\core.py", line 782, in main
    rv = self.invoke(ctx)
  File "d:\myfolder\my-superset\venv\lib\site-packages\click\core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "d:\myfolder\my-superset\venv\lib\site-packages\click\core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "d:\myfolder\my-superset\venv\lib\site-packages\click\core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "d:\myfolder\my-superset\venv\lib\site-packages\click\core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "d:\myfolder\my-superset\venv\lib\site-packages\click\decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "d:\myfolder\my-superset\venv\lib\site-packages\flask\cli.py", line 425, in decorator
    with __ctx.ensure_object(ScriptInfo).load_app().app_context():
  File "d:\myfolder\my-superset\venv\lib\site-packages\flask\cli.py", line 388, in load_app
    app = locate_app(self, import_name, name)
  File "d:\myfolder\my-superset\venv\lib\site-packages\flask\cli.py", line 240, in locate_app
    __import__(module_name)
  File "D:\myfolder\my-superset\Apache-superset-multi_tenancy_new\superset\__init__.py", line 22, in <module>
    from superset.multi_tenant import MultiTenantSecurityManager
  File "D:\myfolder\my-superset\Apache-superset-multi_tenancy_new\superset\multi_tenant.py", line 9, in <module>
    class MultiTenantUser(User):
  File "d:\myfolder\my-superset\venv\lib\site-packages\flask_sqlalchemy\model.py", line 67, in __init__
    super(NameMetaMixin, cls).__init__(name, bases, d)
  File "d:\myfolder\my-superset\venv\lib\site-packages\flask_sqlalchemy\model.py", line 121, in __init__
    super(BindMetaMixin, cls).__init__(name, bases, d)
  File "d:\myfolder\my-superset\venv\lib\site-packages\sqlalchemy\ext\declarative\api.py", line 75, in __init__
    _as_declarative(cls, classname, cls.__dict__)
  File "d:\myfolder\my-superset\venv\lib\site-packages\sqlalchemy\ext\declarative\base.py", line 131, in _as_declarative
    _MapperConfig.setup_mapping(cls, classname, dict_)
  File "d:\myfolder\my-superset\venv\lib\site-packages\sqlalchemy\ext\declarative\base.py", line 160, in setup_mapping
    cfg_cls(cls_, classname, dict_)
  File "d:\myfolder\my-superset\venv\lib\site-packages\sqlalchemy\ext\declarative\base.py", line 192, in __init__
    self._setup_inheritance()
  File "d:\myfolder\my-superset\venv\lib\site-packages\sqlalchemy\ext\declarative\base.py", line 601, in _setup_inheritance
    "Can't place __table_args__ on an inherited class "
sqlalchemy.exc.ArgumentError: Can't place __table_args__ on an inherited class with no table.

Я не могу найти решение относительно этой ошибки.

1 Ответ

0 голосов
/ 16 июля 2020

Появилась новая функция под названием «Безопасность на уровне строк (RLS).

https://github.com/apache/incubator-superset/pull/8699

Она была объединена в версии 0.36, но имела ошибку, поэтому была исключен в последнюю минуту и ​​изменен на 0,37. По умолчанию он отключен и может быть включен в файле конфигурации superset_config.py :

ENABLE_ROW_LEVEL_SECURITY = True

Вы найдете некоторые пункт меню в разделе «Безопасность», который позволит вам добавлять пользовательские фильтры, которые будут добавляться к запросам. Он настраивается источником данных, а фильтры могут зависеть от ролей пользователя. SQL является бесплатным и, следовательно, очень гибким. Таким образом, основной логин клиента c необходимо применить к вашей модели клиента в SQL.

Вы также можете использовать сценарии JINJA, но здесь вы ограничены собственными надмножествами переменных, поскольку самостоятельно определенные переменные будут жить на другом компьютере ( Пользовательский интерфейс против бэкэнда, известного как celery worker).

Эта функция уже используется в различных производственных средах (эта информация из списка разработчиков).

...