mirror of
https://github.com/danswer-ai/danswer.git
synced 2025-05-10 11:50:32 +02:00
Access type (#2523)
This commit is contained in:
parent
87b542b335
commit
122e3fa3fa
@ -51,11 +51,6 @@ export function CustomLLMProviderUpdateForm({
|
|||||||
}) {
|
}) {
|
||||||
const { mutate } = useSWRConfig();
|
const { mutate } = useSWRConfig();
|
||||||
|
|
||||||
const isPaidEnterpriseFeaturesEnabled = usePaidEnterpriseFeaturesEnabled();
|
|
||||||
|
|
||||||
// EE only
|
|
||||||
const { data: userGroups, isLoading: userGroupsIsLoading } = useUserGroups();
|
|
||||||
|
|
||||||
const [isTesting, setIsTesting] = useState(false);
|
const [isTesting, setIsTesting] = useState(false);
|
||||||
const [testError, setTestError] = useState<string>("");
|
const [testError, setTestError] = useState<string>("");
|
||||||
|
|
||||||
|
@ -247,7 +247,6 @@ export default function AddConnector({
|
|||||||
indexingStart,
|
indexingStart,
|
||||||
refreshFreq,
|
refreshFreq,
|
||||||
auto_sync_options,
|
auto_sync_options,
|
||||||
is_public,
|
|
||||||
...connector_specific_config
|
...connector_specific_config
|
||||||
} = values;
|
} = values;
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ import React, { useState, useEffect } from "react";
|
|||||||
import { FormikProps, FieldArray, ArrayHelpers, ErrorMessage } from "formik";
|
import { FormikProps, FieldArray, ArrayHelpers, ErrorMessage } from "formik";
|
||||||
import { Text, Divider } from "@tremor/react";
|
import { Text, Divider } from "@tremor/react";
|
||||||
import { FiUsers } from "react-icons/fi";
|
import { FiUsers } from "react-icons/fi";
|
||||||
import { UserGroup, User, UserRole } from "@/lib/types";
|
import { UserGroup, UserRole } from "@/lib/types";
|
||||||
import { useUserGroups } from "@/lib/hooks";
|
import { useUserGroups } from "@/lib/hooks";
|
||||||
import { BooleanFormField } from "@/components/admin/connectors/Field";
|
import { BooleanFormField } from "@/components/admin/connectors/Field";
|
||||||
import { useUser } from "./user/UserProvider";
|
import { useUser } from "./user/UserProvider";
|
||||||
|
@ -9,6 +9,9 @@ import { Text, Title } from "@tremor/react";
|
|||||||
import { useUser } from "@/components/user/UserProvider";
|
import { useUser } from "@/components/user/UserProvider";
|
||||||
import { useField } from "formik";
|
import { useField } from "formik";
|
||||||
import { AutoSyncOptions } from "./AutoSyncOptions";
|
import { AutoSyncOptions } from "./AutoSyncOptions";
|
||||||
|
import { useContext } from "react";
|
||||||
|
import { SettingsContext } from "@/components/settings/SettingsProvider";
|
||||||
|
import { usePaidEnterpriseFeaturesEnabled } from "@/components/settings/usePaidEnterpriseFeaturesEnabled";
|
||||||
|
|
||||||
function isValidAutoSyncSource(
|
function isValidAutoSyncSource(
|
||||||
value: ConfigurableSources
|
value: ConfigurableSources
|
||||||
@ -24,6 +27,8 @@ export function AccessTypeForm({
|
|||||||
const [access_type, meta, access_type_helpers] =
|
const [access_type, meta, access_type_helpers] =
|
||||||
useField<AccessType>("access_type");
|
useField<AccessType>("access_type");
|
||||||
|
|
||||||
|
const isPaidEnterpriseEnabled = usePaidEnterpriseFeaturesEnabled();
|
||||||
|
const settings = useContext(SettingsContext);
|
||||||
const isAutoSyncSupported = isValidAutoSyncSource(connector);
|
const isAutoSyncSupported = isValidAutoSyncSource(connector);
|
||||||
const { isLoadingUser, isAdmin } = useUser();
|
const { isLoadingUser, isAdmin } = useUser();
|
||||||
|
|
||||||
@ -55,34 +60,42 @@ export function AccessTypeForm({
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<>
|
||||||
<div className="flex gap-x-2 items-center">
|
{isPaidEnterpriseEnabled && (
|
||||||
<label className="text-text-950 font-medium">Document Access</label>
|
|
||||||
</div>
|
|
||||||
<p className="text-sm text-text-500 mb-2">
|
|
||||||
Control who has access to the documents indexed by this connector.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
{isAdmin && (
|
|
||||||
<>
|
<>
|
||||||
<DefaultDropdown
|
<div>
|
||||||
options={options}
|
<div className="flex gap-x-2 items-center">
|
||||||
selected={access_type.value}
|
<label className="text-text-950 font-medium">
|
||||||
onSelect={(selected) =>
|
Document Access
|
||||||
access_type_helpers.setValue(selected as AccessType)
|
</label>
|
||||||
}
|
|
||||||
includeDefault={false}
|
|
||||||
/>
|
|
||||||
|
|
||||||
{access_type.value === "sync" && isAutoSyncSupported && (
|
|
||||||
<div className="mt-6">
|
|
||||||
<AutoSyncOptions
|
|
||||||
connectorType={connector as ValidAutoSyncSources}
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
)}
|
<p className="text-sm text-text-500 mb-2">
|
||||||
|
Control who has access to the documents indexed by this connector.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
{isAdmin && (
|
||||||
|
<>
|
||||||
|
<DefaultDropdown
|
||||||
|
options={options}
|
||||||
|
selected={access_type.value}
|
||||||
|
onSelect={(selected) =>
|
||||||
|
access_type_helpers.setValue(selected as AccessType)
|
||||||
|
}
|
||||||
|
includeDefault={false}
|
||||||
|
/>
|
||||||
|
|
||||||
|
{access_type.value === "sync" && isAutoSyncSupported && (
|
||||||
|
<div className="mt-6">
|
||||||
|
<AutoSyncOptions
|
||||||
|
connectorType={connector as ValidAutoSyncSources}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
</div>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,12 @@ import { useUser } from "@/components/user/UserProvider";
|
|||||||
|
|
||||||
// This should be included for all forms that require groups / public access
|
// This should be included for all forms that require groups / public access
|
||||||
// to be set, and access to this / permissioning should be handled within this component itself.
|
// to be set, and access to this / permissioning should be handled within this component itself.
|
||||||
|
|
||||||
|
export type AccessTypeGroupSelectorFormType = {
|
||||||
|
access_type: AccessType;
|
||||||
|
groups: number[];
|
||||||
|
};
|
||||||
|
|
||||||
export function AccessTypeGroupSelector({}: {}) {
|
export function AccessTypeGroupSelector({}: {}) {
|
||||||
const { data: userGroups, isLoading: userGroupsIsLoading } = useUserGroups();
|
const { data: userGroups, isLoading: userGroupsIsLoading } = useUserGroups();
|
||||||
const { isAdmin, user, isLoadingUser, isCurator } = useUser();
|
const { isAdmin, user, isLoadingUser, isCurator } = useUser();
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import * as Yup from "yup";
|
import * as Yup from "yup";
|
||||||
import { IsPublicGroupSelectorFormType } from "@/components/IsPublicGroupSelector";
|
import { IsPublicGroupSelectorFormType } from "@/components/IsPublicGroupSelector";
|
||||||
import { ConfigurableSources, ValidInputTypes, ValidSources } from "../types";
|
import { ConfigurableSources, ValidInputTypes, ValidSources } from "../types";
|
||||||
|
import { AccessTypeGroupSelectorFormType } from "@/components/admin/connectors/AccessTypeGroupSelector";
|
||||||
|
|
||||||
export type InputType =
|
export type InputType =
|
||||||
| "list"
|
| "list"
|
||||||
@ -845,13 +846,13 @@ For example, specifying .*-support.* as a "channel" will cause the connector to
|
|||||||
};
|
};
|
||||||
export function createConnectorInitialValues(
|
export function createConnectorInitialValues(
|
||||||
connector: ConfigurableSources
|
connector: ConfigurableSources
|
||||||
): Record<string, any> & IsPublicGroupSelectorFormType {
|
): Record<string, any> & AccessTypeGroupSelectorFormType {
|
||||||
const configuration = connectorConfigs[connector];
|
const configuration = connectorConfigs[connector];
|
||||||
|
|
||||||
return {
|
return {
|
||||||
name: "",
|
name: "",
|
||||||
groups: [],
|
groups: [],
|
||||||
is_public: true,
|
access_type: "public",
|
||||||
...configuration.values.reduce(
|
...configuration.values.reduce(
|
||||||
(acc, field) => {
|
(acc, field) => {
|
||||||
if (field.type === "select") {
|
if (field.type === "select") {
|
||||||
@ -876,6 +877,7 @@ export function createConnectorValidationSchema(
|
|||||||
const configuration = connectorConfigs[connector];
|
const configuration = connectorConfigs[connector];
|
||||||
|
|
||||||
return Yup.object().shape({
|
return Yup.object().shape({
|
||||||
|
access_type: Yup.string().required("Access Type is required"),
|
||||||
name: Yup.string().required("Connector Name is required"),
|
name: Yup.string().required("Connector Name is required"),
|
||||||
...configuration.values.reduce(
|
...configuration.values.reduce(
|
||||||
(acc, field) => {
|
(acc, field) => {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user