저는 angularJS를 사용하여 블로그 시스템을 구축 중이며 이제 특정 리소스에 대해 사용하기 쉬운 리소스 인증 흐름을 구축하려고합니다. 예를 들어, 다음 상태 : PROPOSALITEM
, PROPOSALITEM.VIEW
및 PROPOSALITEM.EDIT
입니다. PROPOSALITEM
은 하위 상태에 대해 제공된 :proposalId
에 의해 proposalItem을 해결하는 부모 상태입니다. PROPOSALITEM.VIEW
은 모든 사용자가 액세스 할 수있는보기 상태이며 PROPOSALITEM.EDIT
은 proposal owner
에만 액세스 할 수있는 편집 페이지입니다.angularJS 리소스 기반 권한 부여 라우팅을 설계하는 방법은 무엇입니까?
이 기사의 angularJS에서 role
기반 인증 흐름을 수행하는 데 유용한 구조가 있음을 발견했습니다 : Techniques for authentication in AngularJS applications. 그러나 지금 필요한 것은 사용자가 경로에 액세스 할 수 있는지 여부를 결정하기 위해 리소스의 소유권을 기반으로합니다. 그리고 소유자 권한으로 확인해야하는 proposal
모델과 같은 많은 리소스가 있습니다. 이 모든 모델에는 owner
열이 제공됩니다. 이 문제를 해결할 수있는 일반적인 해결책이 있습니까? (각 모델의 인증 코드는 유지 보수가 어렵 기 때문에 자체 해결 부분에 넣지는 않겠습니다.)
/* Abstract states. Resolve proposalItem */
.state('PROPOSALITEM', {
abstract: true,
url: '/proposals/:proposalId',
template: '<ui-view/>',
resolve: {
proposalItem: function($stateParams, ProposalDataService) {
return ProposalDataService.getItem($stateParams.proposalId);
}
}
})
/* View states. Allows all users to access */
.state('PROPOSALITEM.VIEW', {
abstract: true,
url: '/view',
template: '...'
})
/* Edit states. Allows only the proposal owner */
.state('PROPOSALITEM.EDIT', {
url: '/edit',
template: '...',
resolve: {
proposalItem: function($q, proposalItem, UserDataService) {
var me = UserDataService.getMe();
// me: {
// _id: '1',
// name: '...'
// }
if (proposalItem.owner._id === me._id) {
// Authorized.
return proposalItem;
} else {
// Not authorized.
var deferred = $q.defer();
deferred.reject(ERROR_KEYS.NOT_AUTHORIZED);
return deferred.promise;
}
}
}
})
이것은 매우 중요하고 중요한 질문입니다. 나는 실제로 이것에 대한 작업 솔루션을 가지고 있지만 그것을 게시 할 수 있기 전에 모듈의 형태로 응용 프로그램에서 추출해야합니다. 나는 다음 주말까지 그것을 끝내기를 계획하고있다. 당신이 기꺼이 기다릴 지 확신 할 수 없다. – appmux
심지어 나는 그것을 알게되어서 기뻐할 것입니다. @appmux – micronyks
@appmux 저는 서두르지 않습니다. 아주 당신의 해결책을 고대합니다! –