diff --git a/src/pages/llmodels/components/access-control-modal/form.tsx b/src/pages/llmodels/components/access-control-modal/form.tsx
index d42ecfa8..246b742f 100644
--- a/src/pages/llmodels/components/access-control-modal/form.tsx
+++ b/src/pages/llmodels/components/access-control-modal/form.tsx
@@ -15,6 +15,7 @@ import {
Dropdown,
DropdownProps,
Empty,
+ Flex,
Form,
Radio,
RadioChangeEvent,
@@ -80,9 +81,8 @@ const Label = styled.div`
align-items: center;
gap: 4px;
font-weight: 500;
- margin-block: 8px 12px;
+ margin-bottom: 16px;
font-size: 14px;
- color: var(--ant-color-text-tertiary);
`;
interface AccessControlFormProps {
@@ -107,6 +107,14 @@ type AllowedUsersOverride = {
routeId?: number;
action: PageActionType;
}>;
+ // Optional trigger (e.g. an "Add" button) rendered by the host in its
+ // own layout slot while `Field` renders the body. Same props as Field
+ // so the plugin can gate visibility on action/routeId.
+ Action?: React.ComponentType<{
+ form: any;
+ routeId?: number;
+ action: PageActionType;
+ }>;
};
// Extra policy entries prepended to the radio list (rendered before
@@ -407,41 +415,56 @@ const AccessControlForm = forwardRef((props: AccessControlFormProps, ref) => {
-
name="access_policy" noStyle>
- ({
- label: intl.formatMessage({ id: p.labelId }),
- value: p.policyValue
- })),
- {
- label: intl.formatMessage({ id: 'models.accessSettings.authed' }),
- value: 'authed'
- },
- allowedUsersOverride
- ? {
- label: intl.formatMessage({
- id: allowedUsersOverride.labelId
- }),
- value: allowedUsersOverride.policyValue
- }
- : {
- label: intl.formatMessage({
- id: 'models.accessSettings.allowedUsers'
- }),
- value: ALLOWED_PRINCIPALS_POLICY
- },
- {
- label: intl.formatMessage({
- id: 'models.accessSettings.public'
- }),
- value: 'public'
- }
- ]}
- >
-
+
+ name="access_policy" noStyle>
+ ({
+ label: intl.formatMessage({ id: p.labelId }),
+ value: p.policyValue
+ })),
+ {
+ label: intl.formatMessage({
+ id: 'models.accessSettings.authed'
+ }),
+ value: 'authed'
+ },
+ allowedUsersOverride
+ ? {
+ label: intl.formatMessage({
+ id: allowedUsersOverride.labelId
+ }),
+ value: allowedUsersOverride.policyValue
+ }
+ : {
+ label: intl.formatMessage({
+ id: 'models.accessSettings.allowedUsers'
+ }),
+ value: ALLOWED_PRINCIPALS_POLICY
+ },
+ {
+ label: intl.formatMessage({
+ id: 'models.accessSettings.public'
+ }),
+ value: 'public'
+ }
+ ]}
+ >
+
+ {allowedUsersOverride?.Action &&
+ accessPolicy === overridePolicyValue && (
+
+ )}
+
{accessPolicy === 'public' && (
{
message={intl.formatMessage({
id: 'models.accessSettings.public.tips'
})}
+ overlayScrollerProps={{
+ styles: {
+ wrapper: {
+ paddingLeft: 0
+ }
+ }
+ }}
>
)}
diff --git a/src/pages/llmodels/components/access-control-modal/index.tsx b/src/pages/llmodels/components/access-control-modal/index.tsx
index 1bcc93c2..d446e1c1 100644
--- a/src/pages/llmodels/components/access-control-modal/index.tsx
+++ b/src/pages/llmodels/components/access-control-modal/index.tsx
@@ -130,7 +130,9 @@ const AccessControlModal: React.FC<