Добрые утренние разработчики,
Мне было поручено назначить роли пользователей определенным видам. Я получил три роли:
Это то, что я получил в коде:
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> 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> 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;
}
Как скрыть кнопку удаления и редактирования на основе ролей пользователя в базе данных?
Я бы предложил использовать функции 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;
}
Вам нужна дополнительная информация, чтобы предоставить вам решение. Можете ли вы предоставить некоторые примеры данных, которые поступают из вашего вызова $ http? Вот основное решение, которое вы можете сделать:
Обычно ваши данные должны содержать свойство различать рулон пользователя, который будет использоваться для визуализации вашего представления. Теперь, если вы используете ng-show/ng-hide в этой ситуации, каждый может использовать инструмент проверки браузера и сделать его видимым и легко щелкнуть по вашей кнопке. Поэтому я предлагаю вам использовать шаблон там, чтобы в соответствии с вашей потребностью отображалось представление этой части. Дайте мне знать, если вам об этом поговорить.
Благодарю.
ниже приведен пример для пользователя Редактора для кнопки "Редактировать", чтобы рассмотреть возможность включения внешних условий внутри, если это возможно, в противном случае выполните следующие действия:
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
}
}
надеюсь, это поможет приветствовать!
$http
уже возвращает обещание, поэтому нет необходимости создавать отложенный объект, простоreturn $http.get(url).then(function (result) { return result.data; });