Вы должны хранить свои свойства состояния внутри объекта, карты, в которой каждый ключ будет представлен идентификатором пользователя, а каждое значение будет другим объектом с вашим желаемым состоянием.
Итак, ваш пользовательский редуктор может выглядеть примерно так:
type StatePerUser = {
editPost: boolean,
createPost: boolean,
};
type UserState = {
user: { [userId: number]: StatePerUser },
seePosts: boolean
};
const INITIAL_STATE = {
user: {} // The key-value map for different users. Empty by default, you'll need to populate it when someone does login.
seePosts: true // All users should see posts
};
export default function reducer(state: UserState = INITIAL_STATE, action: *) { ... }
Таким образом, рабочий процесс будет выглядеть примерно так:
- Пользователь выполняет вход в систему, запись добавляется в редуктор пользователей внутри
user
map (вы можете найти более подходящие названия для этих переменных) с идентификатором пользователя, выступающим в качестве ключа, и желаемым объектом прав доступа в качестве значения. (значения поступают с вашего сервера) - Тогда просто, когда вы хотите проверить, имеет ли какой-либо пользователь какое-то конкретное c разрешение / разрешено что-то делать, просто проверьте карту разрешений
user
, например user[<CURRENT_USER_ID>].<PERMISSION_NAME>
и посмотрите, разрешено ли ему делать эту операцию.
В качестве примечания, я бы, возможно, разделил бы это на 2 редуктора, один редуктор user
, содержащий информацию о в настоящий момент зарегистрированном в пользователя, и другой редуктор, возможно, называется permissions/rights
, где будет храниться вышеуказанная информация.