@keystonejs/fields-authed-relationship

KeystoneJS AuthedRelationship Field Type

Usage no npm install needed!

<script type="module">
  import keystonejsFieldsAuthedRelationship from 'https://cdn.skypack.dev/@keystonejs/fields-authed-relationship';
</script>

README

AuthedRelationship

This is the last active development release of this package as Keystone 5 is now in a 6 to 12 month active maintenance phase. For more information please read our Keystone 5 and beyond post.

An extension on the Relationship field which is automatically set to the currently authenticated item during a create mutation.

Great for setting fields like Post.author or Product.owner, etc.

Usage

Basic

const { AuthedRelationship } = require('@keystonejs/fields-authed-relationship');
const { Text } = require('@keystonejs/fields');

keystone.createList('User', {
  fields: {
    name: { type: Text },
  },
});

keystone.createList('Post', {
  fields: {
    // Automatically set to the currently logged in user on create
    author: {
      type: AuthedRelationship,
      ref: 'User',
    },
  },
});

Complete example

This example allows "admins" to overwrite the value

const { AuthedRelationship } = require('@keystonejs/fields-authed-relationship');
const { Checkbox, Text } = require('@keystonejs/fields');

keystone.createList('User', {
  fields: {
    name: { type: Text },
    isAdmin: { type: Checkbox, default: false },
  },
});

const isAdmin = ({ authentication: { item } }) => !!item && item.isAdmin;

keystone.createList('Post', {
  fields: {
    author: {
      type: AuthedRelationship,
      ref: 'User',
      access: {
        create: isAdmin,
        update: isAdmin,
      },
    },
  },
});

Config

Option Type Default Description
isRequired Boolean false Does this field require a value?

Differences from Relationship

  • No many: true. This field is purely for a to-single relationship and cannot be used to refer to more than one item.
  • Cannot specify a defaultValue. The entire purpose of this field is to provide that method for you.
  • When setting isRequired, it will be checked during the "default value" phase of the mutation lifecycle. This means it may throw an error earlier than other fields
  • Default access control set to { create: false, read: true, update: false }
  • Access control does not respect any Keystone-level defaultAccess