Скрыть или показать на основе пользовательских ролей

0

Добрые утренние разработчики,

Мне было поручено назначить роли пользователей определенным видам. Я получил три роли:

  • Власть пользователя (может редактировать, может удалять)
  • Просмотр (без редактирования, без удаления)
  • Основные (без редактирования)

Это то, что я получил в коде:

HTML5 и AngularJS:

<button ng-click="vm.openSettings(vm.selected, $event)" class="btn btn-default"  ng-hide="vm.viewmode === 1 || !vm.selected" ><i class="fa fa-cog"></i>&nbsp;Settings</button>
<button ng-click="vm.deleteProject(vm.selected, $event)" class="btn btn-default" ng-hide="vm.viewmode === 1 || !vm.selected" ><i class="fa fa-trash-o"></i>&nbsp;Delete</button>'

JS:

function getUsers() {
    var d = $q.defer();
    var url = '/api/sso/getusers';
    $http.get(url)
        .success(function (data, status, headers, config) {
           d.resolve(data);
        })
        .error(function (data, status, headers, config) {
           logger.error(data);
           d.reject();
        });
     return d.promise;
  }

Как скрыть кнопку удаления и редактирования на основе ролей пользователя в базе данных?

  • 0
    Служба $http уже возвращает обещание, поэтому нет необходимости создавать отложенный объект, просто return $http.get(url).then(function (result) { return result.data; });
  • 0
    Как ты собираешься получить роли из базы данных? Я имею в виду, это как массив строк или массив объектов?
Показать ещё 3 комментария

3 ответа

1
Лучший ответ

Я бы предложил использовать функции ng-if для скрытия контента, который пользователь никогда не должен видеть.

На ваш запрос можно ответить разными способами. Но я попытаюсь объяснить полезный метод многократного использования.

<!-- From the html only call exact functions in your controller -->
<div ng-controller="TestController as vm">
    <button ng-if="vm.hasEditRights()">Editbutton</button>
    <button ng-if="vm.hasCreateRights()">Createbutton</button>
</div>
myApp.controller('TestController', ['$scope', 'UserService', 
    function($scope, UserService) {

    var vm = this;
    // The functions in the controllers define the actual rights for the functionality
    vm.hasEditRights = function() {
        // Check rights in the UserService with a list of roles that are allowed to this functionality. 
        // This way you can assign multiple roles to 1 functionality.
        // Implement the UserService.hasRole function to check the role of the logged in user 
        // (if the user role is available in the list of roles given than the function will return true)
        return UserService.hasRole([Role.PowerUser])
    };
    vm.hasCreateRights = function() {
        return UserService.hasRole([Role.PowerUser, Role.Basic])
    };
}]);

EDIT: добавлен пример функции UserService.hasRole

var user; // represents the user object
xxx.hasRole = function(allowedRoles) {
    if (angular.isUndefined(allowedRoles)) {
        return false;
    }
    if (angular.isUndefined(user) || angular.isUndefined(user.role)) {
        return false;
    }
   return allowedRoles.indexOf(user.role) !== -1;
}
  • 0
    Я попробую это!
0

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

Обычно ваши данные должны содержать свойство различать рулон пользователя, который будет использоваться для визуализации вашего представления. Теперь, если вы используете ng-show/ng-hide в этой ситуации, каждый может использовать инструмент проверки браузера и сделать его видимым и легко щелкнуть по вашей кнопке. Поэтому я предлагаю вам использовать шаблон там, чтобы в соответствии с вашей потребностью отображалось представление этой части. Дайте мне знать, если вам об этом поговорить.

Благодарю.

0

ниже приведен пример для пользователя Редактора для кнопки "Редактировать", чтобы рассмотреть возможность включения внешних условий внутри, если это возможно, в противном случае выполните следующие действия:

 ng-hide="hideEdit(vm.viewmode === 1 || !vm.selected)"

и в вашем угловом коде выполните свою логику

$scope.hideEdit = function (outsideConditions) {

   var currentUser = userServie.getUsers().currentUser() // get your user 
   if(!currentUser.Editor & outsideConditions) {
      return true;  // hide the button
     }
     else {
          return false; //show the button
        }
  }

надеюсь, это поможет приветствовать!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню