Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Генерация JavaScript в зависимости от прав пользователя (https://javascript.ru/forum/server/3428-generaciya-javascript-v-zavisimosti-ot-prav-polzovatelya.html)

iDeadRat 17.04.2009 17:55

Генерация JavaScript в зависимости от прав пользователя
 
Доброго времени суток.
Возникла следующая задача. Допустим сервис обладает несколькими группами пользователей, обладающими различными уровнями привилегий, и при работе с одним и тем же интерфейсом, каждая из групп обладает своими дополнительными возможностями. Это могут быть как дополнительные вкладки, возможность редактирования полей формы, и просто видимость каких то дополнительных элементов интерфейса. Первое что приходит в голову - это отправлять каждой из групп свой javascript код, сгенерированный на сервере, в зависимости от прав.
Проблема здесь в том, что количество групп достаточно велико, чтобы для каждой из них хранить и поддерживать отдельную ветку кода.
Хотелось бы иметь возможность размечать js код, и на основе разметки генерировать специфичный для группы javascript. Например:

var html = "<div> Simple Div </div>";
// --priveleged {
html += "<div> Priveleged Div </div>";
// --}
Ext.DomQuery.select("div#target")[0].innerHTML = html;



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

Kolyaj 17.04.2009 20:17

http://seanalyzer.ru/projects/jsprocessor/

Щас конечно посвежее есть версия.

iDeadRat 18.04.2009 11:45

Да, это очень похоже на то что нужно. К сожалению у нас используется java, поэтому продолжаю искать дальше ))

x-yuri 18.04.2009 21:10

а как насчет передавать браузеру только информацию (не код), на основе которой сценарий будет разрешать/запрещать действия? А ненужные блоки просто не будут отображаться java'ой

Riim 18.04.2009 21:12

Цитата:

Сообщение от x-yuri
а как насчет передавать браузеру только информацию (не код), на основе которой сценарий будет разрешать/запрещать действия? А запрещенные блоки просто не будут отображаться java'ой

Вот и я все думаю: либо я что-то не до понял, либо они не видят очевидного.

iDeadRat 18.04.2009 21:45

Да, такой подход я тоже обдумывал, но мне принципиально не хочеться грузить браузер пользователя теми скриптами, которые ему в принципе не должны быть доступны...как с точки зрения размера данных, так и с точки зрения безопасности(это спорно конечно, но всё-таки).

x-yuri 18.04.2009 21:53

Цитата:

но мне принципиально не хочеться грузить браузер пользователя теми скриптами, которые ему в принципе не должны быть доступны
а в чем проблема? Не подключай к странице, то, что ей не нужно. Или ты про скрипты которые непосредственно в странице находятся? Так вынеси их в отдельные файлы

iDeadRat 18.04.2009 21:58

В-общем я примерно придумал подход. Возможно кто-то укажет на его недостатки. Если кто-то знаком с технологией jsp в java, то он ему покажеться схожим. Заключается он в том, чтобы в специальных коментариях писать java код, потом обрабатывать файл специальным препроцессором, который код js преобразует в java файл. Сейчас будет немного понятней. Скажем у нас есть следующий js код:

var html = "<div>Simple div</div>

// -- User u = request.getSession().getParameter("user");
// -- Boolean b = PermissionController.checkRights(u);
// -- if(b) {
html += "<div>Private div</div>
// -- }
Ext.DomQuery.select("div#target")[0].innerHTML = html;


Такой код на сервере преобразуется в следующий java файл:

response.write("var html = \"<div>Simple div</div>\"");
User u = request.getSession().getParameter("user");
Boolean b = PermissionController.checkRights(u);
if(b) {
response.write("html += \"<div>Private div</div>\"");
}
response.write("Ext.DomQuery.select(\"div#target\")[0].innerHTML = html");
...

Kolyaj 18.04.2009 22:02

Цитата:

Сообщение от iDeadRat
В-общем я примерно придумал подход.

По ссылке из второго сообщения то же самое, только на PHP :)

Riim 18.04.2009 22:19

iDeadRat,
Не терпится вам все-таки велосипед изобрести. Хотя это дело полезное.


Часовой пояс GMT +3, время: 01:52.