Keystone Js контроль доступа является декларативным, у вас есть полный контроль, и keystone не делает никаких предположений по этому поводу.
Admin : простыми словами вы можете подумать, что Admin означает, что пользователь может получить доступ к приложению Admin-UI. но приложение Admin UI также ограничено с помощью некоторого метода управления доступом.
По умолчанию все имеют доступ к интерфейсу администратора, вы можете ограничить это, используя свойство isAccessAllowed
в опции конструктора приложения Admin UI. из приведенного выше примера ссылки:
new AdminUIApp({
/*...config */
isAccessAllowed: ({ authentication: { item: user, listKey: list } }) => !!user && !!user.isAdmin,
}),
вышеупомянутый элемент списка обычно находится в списке «Пользователь», как определено в стратегии аутентификации
const authStrategy = keystone.createAuthStrategy({
type: PasswordAuthStrategy,
list: 'User',
config: {
identityField: 'username', // default: 'email'
secretField: 'password', // default: 'password'
},
});
...
module.exports = {
keystone: new Keystone(),
apps: [
new GraphQLApp(),
new AdminUIApp({
adminPath: '/admin',
authStrategy,
isAccessAllowed: ({ authentication: { item: user, listKey: list } }) => !!user && !!user.isAdmin,
}),
],
};
Владелец : keystone не определяет владельца, все, что вы делаете, - это создаете право владения на основе декларации, как для сообщения в блоге, а Автор является владельцем, на основании этого различия вы можете разрешить определенное действие автору сообщения, например редактирование и отправка на утверждение.
все это входит в api контроля доступа, когда вы создаете определение контроля доступа, они оценивают функцию и решают, разрешено ли это действие. Вы можете увидеть полный пример того, как это работает в https://github.com/MadeByMike/keystone-access-control-demo и более продвинутый в их тестовом костюме здесь - https://github.com/keystonejs/keystone/blob/master/test-projects/access-control/index.js