Я обсуждаю лучший способ распространения довольно сложных разрешений с сервера на приложение AJAX, и я не уверен, что это лучший подход.
По сути, я хочу, чтобы мои разрешения были определены, чтобы я мог запросить весь набор разрешений за один раз и соответствующим образом настроить пользовательский интерфейс (изменения пользовательского интерфейса могут быть столь же низкими, как отключение определенных элементов контекстного меню). Конечно, мне все еще нужно обеспечить соблюдение разрешений на стороне сервера.
Итак, мне было интересно, есть ли у кого-нибудь предложения, как лучше всего
Мысли?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Закодируйте их как JSON.
Если вы передаете структуру разрешений клиенту как объект JSON (или XML, если хотите), вы можете манипулировать этим объектом с помощью клиентского кода и отправлять его обратно на сервер, который может делать все, что ему нужно для проверки данные и сохранить их.
Я не обязательно считаю это наиболее "правильным" решением, но можно ли сохранить все разрешения на стороне сервера и просто обслуживать обновленный пользовательский интерфейс, а не какую-то систему разрешений JSON?
Вам нужно будет принять решение, исходя из того, насколько загруженным и интенсивным будет ваше приложение, но определенно решение, которое стоит принять в любом случае.
Это предпочтительный подход для ASP.Net, но при определенной степени детализации в системе любого типа также есть преимущества в наличии контроля на стороне клиента.
Это более сложно, чем это; На самом деле я использую ExtJS, поэтому все предопределено в JS. Например, приложение имеет 5 «областей», но только определенные пользователи имеют доступ к этим областям, но я действительно не хочу отображать каждый раз разные JS (и, возможно, возникнут проблемы из-за отсутствия элемента X и т. д.). Вместо этого я думаю, что пользовательский интерфейс должен быть определен одинаково для всех, но скрывать / отображать в соответствии с требованиями.
Если у вас есть четкий набор разрешений, таких как «уровень пользователя» или «тип пользователя», вы можете просто передать значение в скрытом поле и получить доступ к значению через DOM. Вы все равно могли бы сделать это, если бы ваши разрешения были более детализированными, но у вас либо было бы много скрытых полей, либо вам пришлось бы кодировать информацию в XML, JSON или другом формате.
Вы можете установить их как битовые флаги, чтобы вы могли ИЛИ одно числовое значение с маской, чтобы узнать, есть ли у пользователя разрешение на конкретное действие. Это было бы очень гибко, и пока у вас не более 32 или около того конкретных «прав», это позволило бы любую перестановку этих прав в очень маленьком пакете (в основном беззнаковое int).
Например:
0x00000001 //edit permission
0x00000002 //create new thing permission
0x00000004 //delete things permission
0x00000008 //view hidden things permission
.
.
.
0x80000000 //total control of the server and everyone logged in
Тогда пользователь с разрешением 0x000007 может редактировать, создавать и удалять, но ничего больше.
В любом случае, я думаю, вы на правильном пути - выполняйте запрос один раз при вызове страницы, сохраняйте разрешения в глобальной структуре данных JavaScript и переходите оттуда. AJAX - это хорошо, но вы не хотите запрашивать у сервера каждое конкретное разрешение на всей странице. Вы должны сделать это один раз при загрузке страницы, настроить представление своей страницы и сохранить значение в глобальной переменной, а затем ссылаться на разрешения локально для функций событий.
Если вы храните информацию о разрешениях в глобальном объекте JS, разве у пользователя нет возможности редактировать / изменять объект JS с клиентского компьютера?
Разрешения хранятся в JS строго для управления пользовательским интерфейсом, а не для фактического доступа к данным - например, скрыть доступ к вкладке X или показать столбец Y и т. д.
Как бы то ни было, я получил что-то вроде этого: var MyApp.canRead = function (entity, property) {... читает литерал объекта JS, отображаемый с сервера, чтобы определить доступ для чтения к указанной сущности ...} ;. Разрешения определяются в таблице на сервере и передаются клиенту для доступа через функцию canRead ().
Это вроде как упускает суть ... Я могу отправлять туда-обратно в любом формате, который захочу, я это понимаю. Я спрашиваю, как лучше всего связать разрешения, определенные на сервере, с элементами пользовательского интерфейса на клиенте.