2013-06-15 1 views
7

Если у меня есть приложение для внешнего интерфейса JavaScript, то какая лучшая/распространенная практика для обработки разрешений/ACL. Например, я хочу показать/скрыть некоторые элементы и т. Д. Конечно, это не безопасно, но все же на уровне представления, как я могу это контролировать.Разрешения/ACL в приложении на стороне клиента JavaScript

Я использую BackboneJS (с марионеток) в качестве клиентской среды, поэтому с помощью JQuery, Подчеркивание и т.д.

Я имею в виду, на высоком уровне, я могу попытаться каким-то образом отключить некоторые маршруты. Нуждается в некоторых исследованиях, но я мог бы сделать Router.on("route", checkPermissions).

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

ответ

1

Я бы создал пользовательские классы BaseModel/BaseCollection с модифицированной логикой разбора, которая удаляла бы недоступные атрибуты из уровня данных. Позже вы сможете прозрачно переносить эту логику маскирования данных на серверную сторону и получать защиту от производства.

Что касается данных о разрешении, атрибут класса Model/Collection был бы хорошим местом для его объявления.

В взглядах, использовать условную логику akoskm предложенной

+1

Синтаксических из атрибутов конфиденциальных данных на стороне клиента является плохой идеей. Чувствительные данные никогда не должны покидать сервер, если у пользователя нет разрешения на его просмотр. –

6

Для того, чтобы элементы скрыты/видны на экране я встроенные проверки в моем шаблоне, что-то вроде:

<% if (user.isInRole('ADMIN', 'MNGR')) { %> 
    <li <% page == "store" ? print('class="active"') :'' %>> 
    </li> 
<% } %> 

и добавил следующее вспомогательная функция внутри моей модели пользователя для проверки прав доступа:

isInRole: function (rr) { 
    var self = this; 
    $.each(rr, function(i) { 
     if (rr[i] === self.currentRole) { 
      alert('pass'); 
     } 
    }); 
} 

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

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

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