fix: external users can be added to groups manually (#1540)

This commit is contained in:
Meier Lukas
2024-11-24 13:43:25 +01:00
committed by GitHub
parent 2e2814707e
commit 32e6b8ee45
3 changed files with 8 additions and 3 deletions

View File

@@ -32,6 +32,7 @@ export const AddGroupMember = ({ groupId, presentUserIds }: AddGroupMemberProps)
await revalidatePathActionAsync(`/manage/users/groups/${groupId}}/members`); await revalidatePathActionAsync(`/manage/users/groups/${groupId}}/members`);
}, },
presentUserIds, presentUserIds,
excludeExternalProviders: true,
}, },
{ {
title: tMembersAdd("label"), title: tMembersAdd("label"),

View File

@@ -12,6 +12,7 @@ import { UserAvatar } from "@homarr/ui";
interface InnerProps { interface InnerProps {
presentUserIds: string[]; presentUserIds: string[];
excludeExternalProviders?: boolean;
onSelect: (props: { id: string; name: string; image: string }) => void | Promise<void>; onSelect: (props: { id: string; name: string; image: string }) => void | Promise<void>;
confirmLabel?: string; confirmLabel?: string;
} }
@@ -22,7 +23,9 @@ interface UserSelectFormType {
export const UserSelectModal = createModal<InnerProps>(({ actions, innerProps }) => { export const UserSelectModal = createModal<InnerProps>(({ actions, innerProps }) => {
const t = useI18n(); const t = useI18n();
const { data: users, isPending } = clientApi.user.selectable.useQuery(); const { data: users, isPending } = clientApi.user.selectable.useQuery({
excludeExternalProviders: innerProps.excludeExternalProviders,
});
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
const form = useForm<UserSelectFormType>(); const form = useForm<UserSelectFormType>();
const handleSubmitAsync = async (values: UserSelectFormType) => { const handleSubmitAsync = async (values: UserSelectFormType) => {

View File

@@ -160,16 +160,17 @@ export const userRouter = createTRPCRouter({
}), }),
// Is protected because also used in board access / integration access forms // Is protected because also used in board access / integration access forms
selectable: protectedProcedure selectable: protectedProcedure
.input(z.undefined()) .input(z.object({ excludeExternalProviders: z.boolean().default(false) }).optional())
.output(z.array(selectUserSchema.pick({ id: true, name: true, image: true }))) .output(z.array(selectUserSchema.pick({ id: true, name: true, image: true })))
.meta({ openapi: { method: "GET", path: "/api/users/selectable", tags: ["users"], protect: true } }) .meta({ openapi: { method: "GET", path: "/api/users/selectable", tags: ["users"], protect: true } })
.query(({ ctx }) => { .query(({ ctx, input }) => {
return ctx.db.query.users.findMany({ return ctx.db.query.users.findMany({
columns: { columns: {
id: true, id: true,
name: true, name: true,
image: true, image: true,
}, },
where: input?.excludeExternalProviders ? eq(users.provider, "credentials") : undefined,
}); });
}), }),
search: permissionRequiredProcedure search: permissionRequiredProcedure