如何在 KeystoneJS 5 中为用户分配管理员权限?

How does one assign Admin rights to a user in KeystoneJS 5?

如何在 Admin UI 中为用户分配 Admin 状态?

我已经阅读了身份验证指南和访问控制指南,但我不明白 KeystoneJS 中“owner”和“admin”的区别。创建用户时,如何分配该用户管理员权限?您需要如何设置用户列表以允许这样做?那什么是“拥有者”呢?

KeystoneJs 访问控制是声明式的,您拥有完全的控制权,Keystone 对此不做任何假设。

Admin:简而言之,您可能会认为 Admin 意味着用户可以访问 Admin-UI 应用程序。但 Admin UI 应用程序也使用某种访问控制方法受到限制。

默认情况下所有人都可以访问管理员 ui,您可以通过在 Admin UI app constructor option. 中使用 isAccessAllowed 属性 来限制它 从上面 link 示例:

new AdminUIApp({
  /*...config */
  isAccessAllowed: ({ authentication: { item: user, listKey: list } }) => !!user && !!user.isAdmin,
}),

上面这个列表项通常来自 "User" 列表,定义在 Auth Strategy

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 没有定义所有者,您所做的就是根据博客 post 的声明创建所有权权利,作者是所有者,基于这种区别,您可以允许 post 作者进行某些操作,例如编辑和提交以供批准。

所有这些都进入访问控制 api,当您创建访问控制定义时,他们会评估函数并决定是否允许该操作。您可以在 https://github.com/MadeByMike/keystone-access-control-demo and more advanced one in their test suit here - https://github.com/keystonejs/keystone/blob/master/test-projects/access-control/index.js

中查看其工作原理的完整示例