Как управлять разрешениями пользователей относительно группы?

#javascript #reactjs #permissions #jwt

#javascript #reactjs #разрешения #jwt

Вопрос:

Давайте возьмем абстрактный домен, в котором пользователь может создавать группы, приглашать других пользователей и назначать разрешения внутри этих групп.

Схематически это выглядит так

 [
  {
    "groupId": 1,
    "name": "Group 1",
    "users": [
       { "id": 1, "name": "User 1", "permissions": ["A", "B", "C"] }, // same
       { "id": 2, "name": "User 2", "permissions": ["A", "B"] }
       { "id": 3, "name": "User 3", "permissions": ["C"] }
    ]
  },
  {
    "groupId": 2,
    "name": "Group 2",
    "users": [
       { "id": 4, "name": "User 4", "permissions": ["A", "B", "C"] },
       { "id": 5, "name": "User 5", "permissions": ["A", "B"] }
       { "id": 1, "name": "User 1", "permissions": ["C"] } // same
    ]
  }
]
 

В приложении 5 пользователей (от 1 до 5). Каждый из пользователей имеет разрешения внутри своей группы (A, B, C).

Вопрос в том, где хранить это разрешение на веб-клиенте?

Я использую React.js Node.js и управляйте моей аутентификацией через JWT. Можно ли иметь объект в JWT пользователя, который хранит разрешения для каждой группы. Что-то вроде этого

Поддельный-JWT

 {
  "userId": 1,
  "groups": [ 
    { "groupId": 1, "permissions": ["A", "B", "C"]  },
    { "groupId": 2, "permissions": ["C"]  }
  ]
}
 

Я также ожидаю обновления пользовательских разрешений «на лету» без выхода пользователя из системы

Есть какие-нибудь предложения о том, как это сделать правильно?

Ответ №1:

Если ваши правила авторизации (роли) становятся сложными, тогда может быть разумно рассмотреть возможность использования вместо этого подхода авторизации на основе утверждений.

Я думаю, что этот вопрос SO является хорошей отправной точкой:

Комментарии:

1. Спасибо за совет. Чтобы быть более понятным, я хотел бы знать детали реализации моего конкретного случая, а не общего подхода.