@youngshand/payload-auth-plugin
Version:
A temporary fork for testing of Authentication plugin for Payload CMS, use @payload-auth-plugin
111 lines (110 loc) • 2.32 kB
JavaScript
// src/collection/admin.ts
import { MissingCollectionSlug } from "../core/errors/consoleErrors.js";
var withAdminAccountCollection = (incomingCollection, usersCollectionSlug) => {
if (!incomingCollection.slug) {
throw new MissingCollectionSlug;
}
const collectionConfig = {
...incomingCollection,
fields: []
};
const baseFields = [
{
name: "name",
type: "text"
},
{
name: "picture",
type: "text"
},
{
name: "user",
type: "relationship",
relationTo: usersCollectionSlug,
hasMany: false,
required: true,
label: "User"
},
{
name: "issuerName",
type: "text",
required: true,
label: "Issuer Name"
},
{
name: "scope",
type: "text"
},
{
name: "sub",
type: "text",
required: true
},
{
name: "passkey",
type: "group",
fields: [
{
name: "credentialId",
type: "text",
required: true
},
{
name: "publicKey",
type: "json",
required: true
},
{
name: "counter",
type: "number",
required: true
},
{
name: "transports",
type: "json",
required: true
},
{
name: "deviceType",
type: "text",
required: true
},
{
name: "backedUp",
type: "checkbox",
required: true
}
],
admin: {
condition: (_data, peerData) => {
if (peerData.issuerName === "Passkey") {
return true;
}
return false;
}
}
}
];
collectionConfig.fields = [
...baseFields,
...incomingCollection.fields ?? []
];
collectionConfig.access = {
admin: ({ req: { user } }) => Boolean(user),
read: ({ req: { user } }) => Boolean(user),
create: () => false,
update: () => false,
delete: () => false,
...incomingCollection.access ?? {}
};
collectionConfig.admin = {
defaultColumns: ["issuerName", "scope", "user"],
useAsTitle: "id",
...incomingCollection.admin
};
collectionConfig.timestamps = true;
return collectionConfig;
};
export {
withAdminAccountCollection
};