我在Graphcool中使用了模板graphcool / templates / auth / email-password,我想添加管理用户角色的功能。

这是我的定义架构:

type User @model {
    id: ID! @isUnique
    createdAt: DateTime!
    updatedAt: DateTime!
    email: String! @isUnique
    password: String!
    role: UserRole!
}

enum UserRole {
    EDITOR,
    MODERATOR,
    ADMIN
}


我已经在查询中收到角色并将其保存在本地存储中,但是任何人都可以更改它,从而影响前端UI(如果我们添加权限,则不必在服务器端担心)。最佳/安全的管理方式是什么?

最佳答案

您正在使用Graphcool框架吗?

如果需要在graphcool.yml中设置权限。我将包括以下内容:

graphcool.yml

- operation: User.create
  authenticated: true
  query: permissions/User.graphql:adminRole
- operation: User.read
  authenticated: true
  query: permissions/User.graphql:adminRole
- operation: User.update
  authenticated: true
  query: permissions/User.graphql:adminRole
- operation: User.delete
  authenticated: true
  query: permissions/User.graphql:adminRole

- operation: User.read
  authenticated: true
  query: permissions/User.graphql:user
  fields:
  - id
  - name
  - role
  - createdAt
  - updatedAt
  - email
  - company
- operation: User.update
  authenticated: true
  query: permissions/User.graphql:user
  fields:
  - name
  - company


User.graphql

query user($node_id: ID, $user_id: ID!) {
  SomeUserExists(filter: {AND: [{id: $user_id}, {id: $node_id}]})
}

query adminRole($user_id: ID!) {
  SomeUserExists(filter: {id: $user_id, role: ADMIN})
}


这样,用户只能更新其姓名和公司。然后,ADMIN用户可以阅读和编辑所有人。只有ADMIN用户可以创建或更新新用户。

然后,您可能会问如何创建新用户?
我将使用Graphcool模板中的FaaS代码进行电子邮件密码身份验证,方法如下:

https://github.com/graphcool/templates/tree/master/auth/email-password

signup.ts文件应指示新用户如何注册,然后管理员为您创建一个新用户。在注册功能内,您可以将UserRole默认设置为所需的值。

https://github.com/graphcool/templates/blob/master/auth/email-password/src/signup.ts

09-18 22:46