Работа с вложенными ролей и разрешений в реагируют возвращение



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



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



Итак, 2 вопроса:



1) Когда и как вы получаете список ролей и разрешений (когда они входят в систему? Что вы вызываете, конечную точку разрешений или она возвращается в полезных данных ответа сеанса, когда они входят в систему? или как-то иначе?)



2) Как вы храните и повторяете этот список?



Есть вещи, которые вам нужно сделать на стороне пользовательского интерфейса со списком например, такие как Скрыть/показать кнопки удаления, Скрыть / показать все, что угодно для пользователя на основе определенных ролей и разрешений, поэтому мне интересно, как люди это делают.



Серверный API, который вы выбрали, также проверяет, что пользователь может выполнять любые команды http, но это не то, что я имею в виду здесь, я имею в виду обход и проверку ролей на стороне пользовательского интерфейса для обработки поведения пользователя / поведения компонентов пользовательского интерфейса. Некоторые из них можно решить, выяснив, может ли пользователь выполнить вызов API или нет. но если у вас сложный набор ролей, вам все равно нужно иметь этот список перед собой, чтобы каким-то образом выполнять некоторые действия переднего плана, когда пользователь, например, приземляется на компонент.

492   1  

1 ответ:

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

{
  "posts": ["add", "view"],
  "comments": ["add", "view", "delete", "change"]
}

Время отправки вряд ли зависит от дизайна вашего приложения. Как ответ на логин полностью имеет смысл. Ключевым моментом является то, что данные доступны до того, как они понадобятся компоненту. Затем я бы сохранил эти разрешения в хранилище redux и подключил соответствующие компоненты, например:

const Comments = ({comments, hasDeletePermission, hasChangePermissions}) => {
  <ul>
    {comments.map(comment => (
      <li>
        <p>{comment}</p>      
        {hasChangePermission && <button>change</button>}
        {hasDeletePermission && <button>delete</button>}
      </li>
    ))}
  </ul>
};

const mapStateToProps = (state, ownProps) => ({
  hasDeletePermission: state.user.permissions['comments'].includes('delete'),
  hasChangePermissions: state.user.permissions['comments'].includes('change'),
});

export default connect(mapStateToProps)(Comments);

Вы также можете иметь значения разрешений по умолчанию для анонимных пользователей. пользователи.

Comments

    Ничего не найдено.