Распространение разрешений на Javascript

Я обсуждаю лучший способ распространения довольно сложных разрешений с сервера на приложение AJAX, и я не уверен, что это лучший подход.

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

Итак, мне было интересно, есть ли у кого-нибудь предложения, как лучше всего

  1. поддерживать разрешения и использовать их в серверном коде
  2. иметь легкий доступ к разрешениям в javascript
  3. не нужно делать двусторонний запрос к серверу для каждого отдельного разрешения

Мысли?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
7
0
1 069
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Закодируйте их как JSON.

Если вы передаете структуру разрешений клиенту как объект JSON (или XML, если хотите), вы можете манипулировать этим объектом с помощью клиентского кода и отправлять его обратно на сервер, который может делать все, что ему нужно для проверки данные и сохранить их.

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

jvenema 20.07.2012 23:10

Я не обязательно считаю это наиболее "правильным" решением, но можно ли сохранить все разрешения на стороне сервера и просто обслуживать обновленный пользовательский интерфейс, а не какую-то систему разрешений JSON?

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

Это предпочтительный подход для ASP.Net, но при определенной степени детализации в системе любого типа также есть преимущества в наличии контроля на стороне клиента.

CMPalmer 29.10.2008 00:17

Это более сложно, чем это; На самом деле я использую ExtJS, поэтому все предопределено в JS. Например, приложение имеет 5 «областей», но только определенные пользователи имеют доступ к этим областям, но я действительно не хочу отображать каждый раз разные JS (и, возможно, возникнут проблемы из-за отсутствия элемента X и т. д.). Вместо этого я думаю, что пользовательский интерфейс должен быть определен одинаково для всех, но скрывать / отображать в соответствии с требованиями.

jvenema 20.07.2012 23:09
Ответ принят как подходящий

Если у вас есть четкий набор разрешений, таких как «уровень пользователя» или «тип пользователя», вы можете просто передать значение в скрытом поле и получить доступ к значению через 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 с клиентского компьютера?

jeffery_the_wind 19.07.2012 17:00

Разрешения хранятся в JS строго для управления пользовательским интерфейсом, а не для фактического доступа к данным - например, скрыть доступ к вкладке X или показать столбец Y и т. д.

jvenema 20.07.2012 23:07

Как бы то ни было, я получил что-то вроде этого: var MyApp.canRead = function (entity, property) {... читает литерал объекта JS, отображаемый с сервера, чтобы определить доступ для чтения к указанной сущности ...} ;. Разрешения определяются в таблице на сервере и передаются клиенту для доступа через функцию canRead ().

jvenema 20.07.2012 23:10

Другие вопросы по теме