2016-09-13 24 views
5

Tôi đang nâng cấp lên [email protected] và cố gắng tìm ra cách tốt nhất để chuyển hướng người dùng đến trạng thái khác nếu anh ấy không có quyền cần thiết.Chuyển hướng UI-Router 1.0 dựa trên vai trò người dùng

Đây là những gì tôi có:

.state('company_dashboard', { 
    url: '/dashboard', 
    templateUrl: 'dashboard.html', 
    controller: 'CompanyDashboardCtrl', 
    resolve: { 
     user: function(UserService) { 
      return UserService.getActiveUser(); 
     }, 
     company: function(UserService) { 
      return CompanyService.getActiveCompany(); 
     }, 
     permissions: function(CompanyService, user, company){ 
      return CompanyService.getUserPermissions(company, user); 
     } 
    }, 
    onEnter: function($state, permissions) { 
     if (permissions.canAccessDashboard === false) 
      return $state.go('company_landing_page'); 
    } 
}) 

Ví dụ trên hoạt động, nhưng nó ghi lại lỗi sau: TransitionRejection(type: 2, message: The transition has been superseded by a different transition, detail: Transition#1(''{} -> 'company_landing_page'{})) mà làm cho tôi nghĩ rằng, cần có một cách tốt hơn.

Câu hỏi phụ, thực tiễn tốt là kiểm tra quyền trong thời gian resolve?

UPDATE:

Thay đổi $state.go() để $state.target() đã giúp tôi thoát khỏi những lỗi giao diện điều khiển. This comment đã giúp. Mặc dù câu hỏi là viết tắt, cho dù tôi đang làm nó nó đúng nơi?

+0

Tôi đã sử dụng để kiểm tra quyền trên mẫu được xây dựng bởi khung công tác phụ trợ mùa xuân hoặc một cái gì đó, tôi nghĩ rằng việc kiểm tra quyền trên giao diện người dùng không tốt vì mọi người đều có thể xem mã. –

Trả lời

1

tôi sẽ thêm một tài sản dữ liệu trạng thái của bạn như sau:

.state('company_dashboard', { 
    data: { 
      requiresAuthentication: true 
    } 
} 

Và sau đó:

app.run(function ($rootScope, $state) { 
    $rootScope.$on('$stateChangeStart', function (event, toState, toParams) { 
     // Check if user is authenticated 
     // And route requires authentication 
     if (!toState.data.requiresAuthentication) { 
      $state.go(toState.name, toParams); 
     } else if (user && toState.data.requiresAuthentication) { 
      $state.go(toState.name, toParams); 
     } else { 
      $state.go('login'); 
     } 
    }); 
}); 

Điều này dường như làm việc khá tốt ngay cả khi tôi chắc chắn nó có thể được đánh bóng nhiều hơn, nhưng tôi hy vọng điều này sẽ cho bạn ý tưởng về cách bạn có thể tiến hành.

Các vấn đề liên quan