2016-12-23 17 views
9

Trong dự án của tôi, tôi có hai vệ sĩ. AuthGuard và PermissionGuard. Tôi cần đầu tiên AuthGuard chạy và khi nó được giải quyết và nếu true permissionGuard bắt đầu nhưng bây giờ bảo vệ này đang chạy song song và permissionGuard không hoạt động tốt. cách tôi sử dụng cho vấn đề này là tôi đã gọi phương thức AuthGuard CanActivate trong bảo vệ quyền nhưng tôi nghĩ rằng có một cách khá tốt hơn để thực hiện việc này.Angular2 chạy Guard sau khi bảo vệ khác giải quyết

+0

Có thể [this answer] (http://stackoverflow.com/a/40590812/6942210) có thể giúp bạn. Tôi nghĩ anh ấy có cùng một vấn đề. –

+0

cảm ơn, câu trả lời của câu hỏi mà bạn đã đề cập là giống như cách tôi đã làm nhưng như tôi đã nói, tôi nghĩ rằng cách tốt hơn có thể tồn tại. –

+0

@hosseinahmadi. Bạn vẫn cần trợ giúp với điều này? – AngularChef

Trả lời

2

Tôi đã ở trong tình trạng tương tự vài tuần trước, vì vậy đã quyết định viết một số giải pháp "hacky" để đạt được điều này bằng cách sử dụng thuộc tính data của đối tượng định nghĩa tuyến đường.

Ý tưởng là để xác định bảo vệ riêng của bạn (cho phép gọi nó là MainGuard) mà sẽ đọc thuộc tính dữ liệu của bạn (ví dụ guardsList) với một loạt các lính gác bên MainGuard.canActivate chức năng và thực hiện chúng (bằng cách gọi guardsList[i].canActive) một sau khi khác trong một vòng lặp. Bạn sẽ cần phải sử dụng ứng dụng Injector để có thể gọi canActivate trên bảo vệ đã cho.

Nó bị phức tạp khi bạn muốn hỗ trợ Observable, Promise, và đồng bằng boolean bảo vệ tất cả dưới một guardsList mảng, như bạn cần phải đăng ký và chờ đợi để hoàn thành vv hơn một chút

Tôi đã thực hiện "hack" này là Angular Library cho phép bạn thực hiện điều gì đó như sau:

const appRoutes: Routes = [ 
{ 
    ... 
    canActivate: [SequentialGuards], 
    data: { GUARDS_SEQ: [Guard1, Guard2, Guard3] } 
    ... 
}] 
Các vấn đề liên quan