2016-09-13 6 views
5

पर आधारित यूआई-राउटर 1.0 रीडायरेक्ट मैं [email protected] पर अपग्रेड कर रहा हूं और यह पता लगाने की कोशिश कर रहा हूं कि उपयोगकर्ता को एक अलग राज्य में रीडायरेक्ट करने का सबसे अच्छा तरीका क्या है यदि उसके पास आवश्यक अनुमतियां नहीं हैं।उपयोगकर्ता भूमिका

यह है कि मैं क्या है:

.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'); 
    } 
}) 

ऊपर के उदाहरण से काम करता है, लेकिन यह निम्न त्रुटि लॉग: TransitionRejection(type: 2, message: The transition has been superseded by a different transition, detail: Transition#1(''{} -> 'company_landing_page'{})) जो मुझे लगता है, वहाँ एक बेहतर तरीका होना चाहिए बनाता है।

साइड सवाल, क्या resolve के दौरान अनुमतियों की जांच करना अच्छा अभ्यास है?

अद्यतन:

बदलने $state.go()$state.target() करने के लिए मुझे मदद की कंसोल त्रुटि से छुटकारा पाने के। This comment ने मदद की है। हालांकि सवाल खड़ा है, भले ही मैं इसे सही जगह पर कर रहा हूं? ,

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'); 
     } 
    }); 
}); 

यह काफी अच्छी तरह से काम करने लगता है, भले ही मुझे यकीन है कि इसे और अधिक पॉलिश किया जा सकता हूँ:

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

और फिर:

+0

मैं वसंत या कुछ बैकएंड फ्रेमवर्क द्वारा बनाए गए टेम्पलेट पर अनुमति की जांच करता था, मुझे लगता है कि फ्रंटेंड पर जांच की अनुमति अच्छी नहीं है क्योंकि हर कोई कोड देख सकता है। –

उत्तर

1

मैं इस प्रकार के रूप में अपने राज्य के लिए डेटा गुण जोड़ना होगा लेकिन मुझे उम्मीद है कि यह आपको इस बारे में एक विचार देगा कि आप कैसे आगे बढ़ सकते हैं।

संबंधित मुद्दे