Skip to content

Commit

Permalink
chore: adjust
Browse files Browse the repository at this point in the history
  • Loading branch information
FinleyGe committed Sep 12, 2024
1 parent 2bc426f commit 754e565
Show file tree
Hide file tree
Showing 14 changed files with 105 additions and 94 deletions.
12 changes: 12 additions & 0 deletions packages/global/support/user/team/group/api.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
export type postCreateGroupData = {
name: string;
avatar?: string;
members?: string[];
};

export type postUpdateGroupData = {
groupId: string;
name?: string;
avatar?: string;
members?: string[];
};
21 changes: 19 additions & 2 deletions packages/service/support/permission/controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { NextApiResponse } from 'next';
import type { AuthModeType, ReqHeaderAuthType } from './type.d';
import {
AuthUserTypeEnum,
NullPermission,
PerResourceTypeEnum,
SubjectTypeEnum
} from '@fastgpt/global/support/permission/constant';
Expand All @@ -13,12 +14,15 @@ import { FileTokenQuery } from '@fastgpt/global/common/file/type';
import { MongoResourcePermission } from './schema';
import { ClientSession } from 'mongoose';
import { ParentIdType } from '@fastgpt/global/common/parentFolder/type';
import { ResourcePermissionType } from '@fastgpt/global/support/permission/type';
import {
PermissionValueType,
ResourcePermissionType
} from '@fastgpt/global/support/permission/type';
import { bucketNameMap } from '@fastgpt/global/common/file/constants';
import { addMinutes } from 'date-fns';
import { RequireOnlyOne } from '@fastgpt/global/common/type/utils';

export const getResourcePermission = async <T extends `${PerResourceTypeEnum}`>({
export const getResourcePermission = async <T extends PerResourceTypeEnum>({
resourceType,
teamId,
tmbId,
Expand Down Expand Up @@ -323,3 +327,16 @@ export const authFileToken = (token?: string) =>
});
});
});

export const getMaxGroupPer = (
groups: PermissionValueType[],
defaultPer: PermissionValueType = NullPermission
) => {
return groups.reduce((prev, cur) => {
if (cur) {
return Math.max(prev, cur);
} else {
return prev;
}
}, defaultPer);
};
16 changes: 9 additions & 7 deletions packages/service/support/permission/memberGroup/controllers.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
import { MemberGroupSchemaType } from '@fastgpt/global/support/permission/memberGroup/type';
import { MongoGroupMemberModel } from './groupMemberSchema';
import { TeamMemberSchema } from '@fastgpt/global/support/user/team/type';
import { getResourcePermission } from '../controller';
import { PerResourceTypeEnum } from '@fastgpt/global/support/permission/constant';
import { MongoResourcePermission } from '../schema';
import { MongoMemberGroupModel } from './memberGroupSchema';
import { Permission } from '@fastgpt/global/support/permission/controller';

export const getGroupsByTmbId = async (tmbId: string) => {
return (
Expand Down Expand Up @@ -56,17 +54,20 @@ export const getGroupMembersWithInfoByGroupId = async (groupId: string) => {
/**
* Get tmb's group permission: the maximum permission of the group
* @param tmbId
* @param resourceId
* @param resourceType
* @returns
*/
export const getGroupPermission = async ({
export const getGroupPermission = async <T extends `${PerResourceTypeEnum}`>({
tmbId,
resourceId,
teamId,
resourceType
}: {
tmbId: string;
resourceId: string;
resourceType: `${PerResourceTypeEnum}`;
}) => {
teamId: string;
resourceType: T;
} & (T extends PerResourceTypeEnum.team ? { resourceId?: undefined } : { resourceId: string })) => {
const groupIds = (await getGroupsByTmbId(tmbId)).map((item) => item._id);
const groupPermissions = (
await MongoResourcePermission.find({
Expand All @@ -75,14 +76,15 @@ export const getGroupPermission = async ({
},
resourceType,
resourceId: resourceType === 'team' ? undefined : resourceId,
teamId: resourceType === 'team' ? resourceId : undefined
teamId
})
).map((item) => item.permission);
const maxPermission = groupPermissions.length > 0 ? Math.max(...groupPermissions) : undefined;

return maxPermission;
};

/** Get all groups of a team */
export const getGroupsByTeamId = async (teamId: string) => {
const groups = await MongoMemberGroupModel.find({
teamId
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { MemberGroupCollectionName } from './memberGroupSchema';
import { GroupMemberSchemaType } from '@fastgpt/global/support/permission/memberGroup/type';
const { Schema } = connectionMongo;

export const GroupMemberCollectionName = 'group_member';
export const GroupMemberCollectionName = 'group_members';

export const GroupMemberSchema = new Schema({
groupId: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { connectionMongo, getMongoModel } from '../../../common/mongo';
import { MemberGroupSchemaType } from '@fastgpt/global/support/permission/memberGroup/type';
const { Schema } = connectionMongo;

export const MemberGroupCollectionName = 'member_group';
export const MemberGroupCollectionName = 'member_groups';

export const MemberGroupSchema = new Schema({
teamId: {
Expand Down
6 changes: 3 additions & 3 deletions packages/service/support/permission/schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ import {
} from '@fastgpt/global/support/user/team/constant';
import { connectionMongo, getMongoModel } from '../../common/mongo';
import type { ResourcePermissionType, SubjectType } from '@fastgpt/global/support/permission/type';
import { PerResourceTypeEnum, SubjectTypeEnum } from '@fastgpt/global/support/permission/constant';
import { MemberGroupSchema, MemberGroupCollectionName } from './memberGroup/memberGroupSchema';
import { PerResourceTypeEnum } from '@fastgpt/global/support/permission/constant';
import { MemberGroupCollectionName } from './memberGroup/memberGroupSchema';
const { Schema } = connectionMongo;

export const ResourcePermissionCollectionName = 'resource_permission';
export const ResourcePermissionCollectionName = 'resource_permissions';

export const ResourcePermissionSchema = new Schema({
teamId: {
Expand Down
17 changes: 6 additions & 11 deletions packages/service/support/user/team/controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import {
import { MongoTeamMember } from './teamMemberSchema';
import { MongoTeam } from './teamSchema';
import { UpdateTeamProps } from '@fastgpt/global/support/user/team/controller';
import { getResourcePermission } from '../../permission/controller';
import { PerResourceTypeEnum } from '@fastgpt/global/support/permission/constant';
import { getMaxGroupPer, getResourcePermission } from '../../permission/controller';
import { NullPermission, PerResourceTypeEnum } from '@fastgpt/global/support/permission/constant';
import { TeamPermission } from '@fastgpt/global/support/permission/user/controller';
import { getGroupsByTmbId } from '../../permission/memberGroup/controllers';

Expand All @@ -25,25 +25,20 @@ async function getTeamMember(match: Record<string, any>): Promise<TeamTmbItemTyp
tmbId: tmb._id
});

const groups = (await getGroupsByTmbId(tmb._id)).map((item) => {
const groupIdList = (await getGroupsByTmbId(tmb._id)).map((item) => {
return item._id;
});
console.debug(groups);

const groupPers = await Promise.all(
groups.map((groupId) =>
groupIdList.map((groupId) =>
getResourcePermission({
resourceType: PerResourceTypeEnum.team,
groupId,
teamId: tmb.teamId._id
})
)
); // could be null
const maxGroupPer = groupPers.reduce((prev, cur) => {
if (cur) {
return Math.max(prev, cur.permission);
}
return prev;
}, 0);
const maxGroupPer = getMaxGroupPer(groupPers.map((item) => item?.permission || NullPermission));

return {
userId: String(tmb.userId),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ function PermissionSelect({
}: PermissionSelectProps) {
const { t } = useTranslation();
const { permission, permissionList } = useContextSelector(CollaboratorContext, (v) => v);
const ref = useRef<any>(null);
const closeTimer = useRef<any>();
const ref = useRef<HTMLButtonElement>(null);
const closeTimer = useRef<NodeJS.Timeout>();

const [isOpen, setIsOpen] = useState(false);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React, { useMemo, useState } from 'react';
import React, { useState } from 'react';
import MyModal from '@fastgpt/web/components/common/MyModal';
import { useTranslation } from 'next-i18next';
import { ModalCloseButton, ModalBody, Box, ModalFooter, Button } from '@chakra-ui/react';
Expand All @@ -7,14 +7,6 @@ import { useRequest } from '@fastgpt/web/hooks/useRequest';
import { postInviteTeamMember } from '@/web/support/user/team/api';
import { useConfirm } from '@fastgpt/web/hooks/useConfirm';
import type { InviteMemberResponse } from '@fastgpt/global/support/user/team/controller.d';
import MySelect from '@fastgpt/web/components/common/MySelect';
import {
ManagePermissionVal,
ReadPermissionVal,
WritePermissionVal
} from '@fastgpt/global/support/permission/constant';
import { useI18n } from '@/web/context/I18n';
import { useUserStore } from '@/web/support/user/useUserStore';

const InviteModal = ({
teamId,
Expand All @@ -26,46 +18,45 @@ const InviteModal = ({
onSuccess: () => void;
}) => {
const { t } = useTranslation();
const { userT } = useI18n();
const { ConfirmModal, openConfirm } = useConfirm({
title: t('common:user.team.Invite Member Result Tip'),
showCancel: false
});
const { userInfo } = useUserStore();
// const { userInfo } = useUserStore();

const [inviteUsernames, setInviteUsernames] = useState<string[]>([]);
const inviteTypes = useMemo(
() => [
{
label: userT('permission.Read'),
description: userT('permission.Read desc'),
value: ReadPermissionVal
},
{
label: userT('permission.Write'),
description: userT('permission.Write tip'),
value: WritePermissionVal
},
...(userInfo?.team?.permission.isOwner
? [
{
label: userT('permission.Manage'),
description: userT('permission.Manage tip'),
value: ManagePermissionVal
}
]
: [])
],
[userInfo?.team?.permission.isOwner, userT]
);
const [selectedInviteType, setSelectInviteType] = useState(inviteTypes[0].value);
// const inviteTypes = useMemo(
// () => [
// {
// label: userT('permission.Read'),
// description: userT('permission.Read desc'),
// value: ReadPermissionVal
// },
// {
// label: userT('permission.Write'),
// description: userT('permission.Write tip'),
// value: WritePermissionVal
// },
// ...(userInfo?.team?.permission.isOwner
// ? [
// {
// label: userT('permission.Manage'),
// description: userT('permission.Manage tip'),
// value: ManagePermissionVal
// }
// ]
// : [])
// ],
// [userInfo?.team?.permission.isOwner, userT]
// );
// const [selectedInviteType, setSelectInviteType] = useState(inviteTypes[0].value);

const { mutate: onInvite, isLoading } = useRequest({
mutationFn: () => {
return postInviteTeamMember({
teamId,
usernames: inviteUsernames,
permission: selectedInviteType
usernames: inviteUsernames
// permission: selectedInviteType
});
},
onSuccess(res: InviteMemberResponse) {
Expand Down Expand Up @@ -104,9 +95,9 @@ const InviteModal = ({
<ModalBody>
<Box mb={2}>{t('common:user.Account')}</Box>
<TagTextarea defaultValues={inviteUsernames} onUpdate={setInviteUsernames} />
<Box mt={4}>
<MySelect list={inviteTypes} value={selectedInviteType} onchange={setSelectInviteType} />
</Box>
{/* <Box mt={4}> */}
{/* <MySelect list={inviteTypes} value={selectedInviteType} onchange={setSelectInviteType} /> */}
{/* </Box> */}
</ModalBody>
<ModalFooter>
<Button
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import MyBox from '@fastgpt/web/components/common/MyBox';
import MyTag from '@fastgpt/web/components/common/Tag/index';
import { TeamPermission } from '@fastgpt/global/support/permission/user/controller';

const AddModal = dynamic(() => import('./AddModal'));
const AddMemberWithPermissionModal = dynamic(() => import('./AddMemberWithPermissionModal'));

function PermissionManage() {
const { t } = useTranslation();
Expand All @@ -31,7 +31,7 @@ function PermissionManage() {
onClose: onCloseAddManager
} = useDisclosure();

const { runAsync: removePermission, loading: isRemovingPermission } = useRequest2(
const { runAsync: onRemovePermission, loading: isRemovingPermission } = useRequest2(
delMemberPermission,
{
successToast: t('user:delete.success'),
Expand Down Expand Up @@ -100,7 +100,7 @@ function PermissionManage() {
cursor="pointer"
_hover={{ color: 'red.600' }}
onClick={() => {
removePermission({
onRemovePermission({
groupId: group._id
});
}}
Expand Down Expand Up @@ -128,7 +128,7 @@ function PermissionManage() {
cursor="pointer"
_hover={{ color: 'red.600' }}
onClick={() => {
removePermission({
onRemovePermission({
tmbId: clb.tmbId
});
}}
Expand Down Expand Up @@ -198,7 +198,7 @@ function PermissionManage() {
cursor="pointer"
_hover={{ color: 'red.600' }}
onClick={() => {
removePermission({
onRemovePermission({
groupId: group._id
});
}}
Expand Down Expand Up @@ -226,7 +226,7 @@ function PermissionManage() {
cursor="pointer"
_hover={{ color: 'red.600' }}
onClick={() => {
removePermission({
onRemovePermission({
tmbId: clb.tmbId
});
}}
Expand All @@ -238,7 +238,11 @@ function PermissionManage() {
})}
</Flex>
{isOpenAddManager && (
<AddModal onClose={onCloseAddManager} onSuccess={onCloseAddManager} addType={addType} />
<AddMemberWithPermissionModal
onClose={onCloseAddManager}
onSuccess={onCloseAddManager}
addType={addType}
/>
)}
</MyBox>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ type selectedType = {
function SelectMember({
allMembers,
selected = { member: [], group: [] },
setSelected,
mode = 'both'
setSelected
// mode = 'both'
}: {
allMembers: {
member: memberType[];
Expand Down Expand Up @@ -190,8 +190,8 @@ function SelectMember({
);
}

// This function is for use with react-hook-form
function controller({
// This function is for using with react-hook-form
function ControllerWrapper({
control,
allMembers,
mode = 'both',
Expand Down Expand Up @@ -252,4 +252,4 @@ function controller({
);
}
export const UnControlledSelectMember = SelectMember;
export default controller;
export default ControllerWrapper;
Loading

0 comments on commit 754e565

Please sign in to comment.