Exemplo n.º 1
0
    (metadata: Metadata, groups: Array<Group>, permissions: GroupsPermissions, databaseId: DatabaseId, schemaName: SchemaName) => {
        const database = metadata && metadata.database(databaseId);

        if (!groups || !permissions || !metadata || !database) {
            return null;
        }

        const tables = database.tablesInSchema(schemaName || null);
        const defaultGroup = _.find(groups, isDefaultGroup);

        return {
            type: "table",
            crumbs: database.schemaNames().length > 1 ? [
                ["Databases", "/admin/permissions/databases"],
                [database.name, "/admin/permissions/databases/"+database.id+"/schemas"],
                [schemaName]
            ] : [
                ["Databases", "/admin/permissions/databases"],
                [database.name],
            ],
            groups,
            permissions: {
                "fields": {
                    header: "Data Access",
                    options(groupId, entityId) {
                        return [OPTION_ALL, OPTION_NONE]
                    },
                    getter(groupId, entityId) {
                        return getFieldsPermission(permissions, groupId, entityId);
                    },
                    updater(groupId, entityId, value) {
                        MetabaseAnalytics.trackEvent("Permissions", "fields", value);
                        return updateFieldsPermission(permissions, groupId, entityId, value, metadata);
                    },
                    confirm(groupId, entityId, value) {
                        return [
                            getPermissionWarningModal(getFieldsPermission, "fields", defaultGroup, permissions, groupId, entityId, value),
                            getControlledDatabaseWarningModal(permissions, groupId, entityId)
                        ];
                    },
                    warning(groupId, entityId) {
                        return getPermissionWarning(getFieldsPermission, "fields", defaultGroup, permissions, groupId, entityId);
                    }
                }
            },
            entities: tables.map(table => ({
                id: {
                    databaseId: databaseId,
                    schemaName: schemaName,
                    tableId: table.id
                },
                name: table.display_name,
                subtitle: table.name
            }))
        };
    }
Exemplo n.º 2
0
    (metadata: Metadata, groups: Array<Group>, permissions: GroupsPermissions, databaseId: DatabaseId, schemaName: SchemaName) => {
        const database = metadata && metadata.database(databaseId);

        if (!groups || !permissions || !metadata || !database) {
            return null;
        }

        const tables = database.tablesInSchema(schemaName || null);

        return {
            type: "table",
            crumbs: database.schemaNames().length > 1 ? [
                ["Databases", "/admin/permissions/databases"],
                [database.name, "/admin/permissions/databases/"+database.id+"/schemas"],
                [schemaName]
            ] : [
                ["Databases", "/admin/permissions/databases"],
                [database.name],
            ],
            groups,
            permissions: {
                "fields": {
                    options(groupId, entityId) {
                        return ["all", "none"]
                    },
                    getter(groupId, entityId) {
                        return getFieldsPermission(permissions, groupId, entityId);
                    },
                    updater(groupId, entityId, value) {
                        return updateFieldsPermission(permissions, groupId, entityId, value, metadata);
                    },
                    confirm(groupId, entityId, value) {
                        if (getSchemasPermission(permissions, groupId, entityId) !== "controlled") {
                            return {
                                title: "Changing this database to limited access"
                            };
                        }
                    }
                }
            },
            entities: tables.map(table => ({
                id: {
                    databaseId: databaseId,
                    schemaName: schemaName,
                    tableId: table.id
                },
                name: table.display_name,
                subtitle: table.name
            }))
        };
    }
Exemplo n.º 3
0
  (
    metadata: Metadata,
    groups: Array<GroupType>,
    permissions: GroupsPermissions,
    databaseId: DatabaseId,
    schemaName: SchemaName,
  ) => {
    const database = metadata.databases[databaseId];

    if (!groups || !permissions || !database) {
      return null;
    }

    const tables = database.tablesInSchema(schemaName || null);
    const defaultGroup = _.find(groups, isDefaultGroup);

    return {
      type: "table",
      icon: "table",
      crumbs:
        database.schemaNames().length > 1
          ? [
              [t`Databases`, "/admin/permissions/databases"],
              [
                database.name,
                "/admin/permissions/databases/" + database.id + "/schemas",
              ],
              [schemaName],
            ]
          : [[t`Databases`, "/admin/permissions/databases"], [database.name]],
      groups,
      permissions: {
        fields: {
          header: t`Data Access`,
          options(groupId, entityId) {
            return [OPTION_ALL, OPTION_NONE];
          },
          getter(groupId, entityId) {
            return getFieldsPermission(permissions, groupId, entityId);
          },
          updater(groupId, entityId, value) {
            MetabaseAnalytics.trackEvent("Permissions", "fields", value);
            let updatedPermissions = updateFieldsPermission(
              permissions,
              groupId,
              entityId,
              value,
              metadata,
            );
            return inferAndUpdateEntityPermissions(
              updatedPermissions,
              groupId,
              entityId,
              metadata,
            );
          },
          confirm(groupId, entityId, value) {
            return [
              getPermissionWarningModal(
                getFieldsPermission,
                "fields",
                defaultGroup,
                permissions,
                groupId,
                entityId,
                value,
              ),
              getControlledDatabaseWarningModal(permissions, groupId, entityId),
              getRevokingAccessToAllTablesWarningModal(
                database,
                permissions,
                groupId,
                entityId,
                value,
              ),
            ];
          },
          warning(groupId, entityId) {
            return getPermissionWarning(
              getFieldsPermission,
              "fields",
              defaultGroup,
              permissions,
              groupId,
              entityId,
            );
          },
        },
      },
      entities: tables.map(table => ({
        id: {
          databaseId: databaseId,
          schemaName: schemaName,
          tableId: table.id,
        },
        name: table.display_name,
        subtitle: table.name,
      })),
    };
  },
Exemplo n.º 4
0
 id =>
   getFieldsPermission(permissions, groupId, id) === "none" ||
   _.isEqual(id, entityId),