2008-10-28 3 views
7

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

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

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

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

Мысли?

ответ

2

Если у вас есть четкий набор разрешений, как на «уровне пользователя "или" тип пользователя ", вы можете просто передать значение вниз в скрытом поле и получить доступ к значению через 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 хорош, но вы не хотите запрашивать сервер для каждого конкретного разрешения на всей вашей странице. Вы сделаете это один раз на загрузке страницы, настройте презентацию своей страницы и сохраните значение в глобальной переменной, а затем укажите разрешения (-и) локально для функций событий.

2

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

+0

Этот вид не подходит ... Я могу отправить назад/вперед в любом формате, который я хочу, я это понимаю.Я спрашиваю, как лучше всего связать разрешения, определенные на сервере с элементами пользовательского интерфейса на клиенте. – jvenema 2012-07-20 19:10:28

1

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

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

+0

Это будет предпочтительный подход ASP.Net, но с определенной степенью детализации в любой системе типов есть преимущества и для контроля на стороне клиента. – CMPalmer 2008-10-28 21:17:30

+0

Это сложнее, чем это; Я фактически использую ExtJS, поэтому все заранее определено в JS. Например, приложение имеет 5 «областей», но только определенные пользователи имеют доступ к этим областям, но я не хочу каждый раз выставлять разные JS (и, возможно, есть проблемы, потому что элемент X отсутствует и т. Д.). Вместо этого, я думаю, что пользовательский интерфейс должен быть одинаковым для всех, но скрыть/показать в соответствии с perms. – jvenema 2012-07-20 19:09:37

Смежные вопросы