'use client' import type { AccessPolicyWithBindings, ResourceOpenScope, ResourceUserAccessSetting, } from '@/models/access-control' import { Button } from '@langgenius/dify-ui/button' import { cn } from '@langgenius/dify-ui/cn' import { useMemo } from 'react' import { useTranslation } from 'react-i18next' import Loading from '@/app/components/base/loading' import AddAccessSubjectPopover from './add-access-subject-popover' import { ACCESS_RULE_TABLE_GRID } from './constants' import ResourceOpenScopeSection from './open-scope-section' import TitleInfotip from './title-infotip' import UserAccessPolicyRow from './user-access-policy-row' export type AccessRulesEditorProps = { rules: AccessPolicyWithBindings[] userAccessSettings: ResourceUserAccessSetting[] isLoadingRules: boolean isLoadingUserAccessSettings: boolean openScope?: ResourceOpenScope isUpdatingOpenScope: boolean updatingAccountId: string | null maintainerId?: string | null className?: string onOpenScopeChange?: (openScope: ResourceOpenScope) => void onUserAccessPoliciesChange?: (accountId: string, accessPolicyIds: string[]) => void onRemoveAccessPolicyMemberBinding?: (accountId: string, accessPolicyId: string) => void onAddAccessSubject?: (accountId: string, accessPolicyIds: string[]) => void } export default function AccessRulesEditor({ rules, userAccessSettings, isLoadingRules, isLoadingUserAccessSettings, openScope, isUpdatingOpenScope, updatingAccountId, maintainerId, className, onOpenScopeChange, onUserAccessPoliciesChange, onRemoveAccessPolicyMemberBinding, onAddAccessSubject, }: AccessRulesEditorProps) { const { t } = useTranslation() const isLoading = isLoadingRules || isLoadingUserAccessSettings const individualPermissionSettingsTip = t( ($) => $['accessRule.individualPermissionSettingsTip'], { ns: 'permission' }, ) const policyOptions = useMemo(() => { return rules.map((rule) => ({ id: rule.policy.id, name: rule.policy.name, })) }, [rules]) return (

{t(($) => $['accessRule.individualPermissionSettings'], { ns: 'permission' })}

{onAddAccessSubject ? ( ) : ( )}
{t(($) => $['accessRule.member'], { ns: 'permission' })}
{t(($) => $['accessRule.permission'], { ns: 'permission' })}
{t(($) => $['accessRule.actions'], { ns: 'permission' })}
{isLoading ? (
) : userAccessSettings.length === 0 ? (
{t(($) => $['accessRule.noUserAccessSettings'], { ns: 'permission' })}
) : (
{userAccessSettings.map((setting, index) => ( 0 && 'border-t border-divider-subtle')} onChange={onUserAccessPoliciesChange} onRemove={onRemoveAccessPolicyMemberBinding} /> ))}
)}
) }