2015-06-26 3 views
0

Имейте длинный список предметов, для некоторых из которых у пользователя есть разрешения для некоторых из них. Как я могу проверить, имеет ли пользователь разрешение для определенного элемента? Я могу загрузить разрешения в контроллере, а затем, когда я повторяю список в ng-repat, вызовите метод, чтобы проверить, есть ли у этого элемента у меня разрешение - элемент находится в массиве разрешений, загруженном ранее. То, что я видел при попытке этого подхода, состоит в том, что из-за двухстороннего переноса данных это занимает много времени - проверка выполняется даже тогда, когда пользователь делает что-то еще на экране - нажатие кнопки - взаимодействие с контроллером. Каким будет наилучший способ реализации этого?Угловые разрешения JS Проверка

+3

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

+0

Хорошая идея. Я фактически проверяю оба места на передней стороне и в хранимой процедуре в БД. Интересной частью является угловая односторонняя оптимизация привязки данных, в настоящее время я делаю это с использованием двухстороннего механизма –

ответ

0

Я обновляю свой пользователь (-> разрешения) только при запуске приложения или изменении маршрута. С этим я не получаю никаких проблем с производительностью в моем центре метода

$rootScope.authService.hasPermission(roles) 

, который только проверяет результат, так что JS не имеет ничего, чтобы вычислить в шаблоне.

0

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

var memoize = require('lodash.memoize') 
var hasPermission = memoize(service.hasPermission) 

Если вы хотите, чтобы очистить кэш просто вызвать

hasPermission.cache.clear() 

Я использовал этот подход в своих проектах с использованием CASL и работает довольно быстро