2013-10-28 17 views
0

몇 가지보기가있는 프로젝트에서 작업 중입니다. 일부보기는 주어진 사용자가 액세스 할 수 없습니다. 내가 원하는 것은 사용자가 자신의 권한으로 인해 제한된 URL을 탐색하면 '/ project/manhatten/security'라고 말하게합니다. 간단히 말해서 (HTML 부분)보기를 표시하고 싶습니다. 접근 불가'.각도 - URL을 변경하지 않고보기로드

하지만 URL을 변경하지 않고보기를 표시하고 싶습니다. 나는/프로젝트/manhatten/보안 ', 그래서 사용자가 URL을 복사 할 수있는 충분한 권한을 가진 사람에게 그것을 줄 수있는 URL을 유지하고, 그것은 잘 작동합니다.

이것을 달성하는 가장 좋은 방법은 무엇입니까? ng-view 또는 ng-viewng-include의 조합을 계속 사용할 수 있습니까?

미리 감사드립니다.

+0

이보기에 액세스 할 수 있는지 잘 확인해보십시오. 'ng-view' 호출이 아니라면 부분을 찾을 수 없습니다. – Chandermani

답변

3

특정보기에 대한 액세스를 제한하는 방법에 대해서는 잘 모릅니다. 나는 당신이 전망을 제한해서는 안된다고 생각합니다. api에 대한 액세스를 제한하면됩니다. 따라서 사용자가 프로젝트를 삭제할 수있는 권한이없는 경우. api를 호출하면 서버에서 401을 보내면됩니다. 클라이언트 측에서는 $ http 인터셉터를 사용하여이 401을 처리합니다.

다음 작업을 수행 할 것입니다 :

<div ng-controller=ErrorMessageCtrl ng-show=error.message> 
    {{error.message}} 

    <ng-view></ng-view> 
이 이

ErrorMessageCtrl 통지 받게됩니다

index.html을에게 오류 메시지를 표시하도록 된 index.html에서

요소를 생성/지침을 액세스 거부 오류가 발생한 경우 :

.controller('ErrorMessageCtrl', function ($scope) { 
    $scope.error = {} 
    $scope.$on('error:accessDenied', function(event, message) { 
    $scope.error.message = message 
    }) 
}) 

는 HTTP 401 인증 오류 처리 할 인터셉터 서비스를 만듭니다

.factory('authErrorInterceptor', function ($q, $rootScope) { 
    return { 
    response: function (response) { 
     return response 
    }, 
    responseError: function(rejection) { 
     if (rejection.status === 401) { 
     $rootScope.$broadcast('error:accessDenied', 'Access Denied') 
     } 
     return $q.reject(rejection) 
    } 
    } 
}) 

은 $ httpProvider에 요격 서비스를 추가

.config(function ($httpProvider, $routeProvider) { 
    $httpProvider.interceptors.push('authErrorInterceptor') 
    $routeProvider.when('/project/manhatten/security', { 
    template: '<div><h1>Secure Page</h1>secure data from server: {{data}}</div>', 
    controller: 'SecureDataCtrl' 
    }) 
}) 

$ http.get ('/ API/일부/보안/데이터') 401 http 상태 코드를 반환합니다.

.controller('SecureDataCtrl', function ($scope, $http) { 
    $scope.data = 'none' 
    $http.get('/project/manhatten/security') 
    .success(function (data) { 
     $scope.data = 'secure data' 
    }) 
}) 

10 분 후에 해킹되었습니다. 리팩토링을해야합니다. 오류 알림 서비스를 주입하고 범위에 오류 메시지를 브로드 캐스팅하지 않는 errorMessage 지시문을 작성하는 것과 같습니다.

관련 문제