2016-05-08 12 views
5

प्रिय पराक्रमी ढेर अतिप्रवाह के माध्यम से पुनःप्राप्त अनुमतियां निर्धारित,कोणीय-अनुमति एपीआई

मैं अनुमति-आधारित प्रमाणीकरण लागू करने के लिए कोणीय अनुमति का उपयोग करने के लिए कोशिश कर रहा हूँ, लेकिन मैं जहां उन अनुमतियों जहाँ से प्राप्त किए गए हैं परिभाषित करने के लिए पता नहीं है मेरी एपीआई के माध्यम से बैक-एंड जिसके लिए टोकन-आधारित पहुंच की आवश्यकता होती है।

सबसे पहले, मुझे थोड़ा ऐप दें कि मेरा ऐप कैसा दिखता है। मेरे बैक-एंड पर, मेरा सिस्टम पोर्टल, मैं अलग-अलग एपीआई को कॉल करने की अनुमति देने के लिए अनुमतियां परिभाषित करता हूं। अनुमतियाँ हर समय नहीं बदलेगी। केवल जब मैं नई विशेषताएं (एपीआई) जोड़ता हूं, तो नई अनुमतियां जोड़ दी जाएंगी। उदाहरण के लिए। permission1: api1, api2, api3 permission2: api4, api5, api6 permission3: api7, api8, api9

सामने के अंत पर, ग्राहक सामने के अंत वेब पोर्टल के लिए लॉग इन और अनुकूलित भूमिकाओं के लिए खुद को जो समूह बनाने के कुछ अनुमतियाँ एक साथ, उदाहरण के लिए: व्यवस्थापक: permission1, permission2, permission3 लेखा परीक्षक: अनुमति 3

कोणीय अनुमति दस्तावेज़ कहते हैं (https://github.com/Narzerus/angular-permission/blob/development/docs/1-manging-permissions.md#multiple-permissions) मैं अनुमतियाँ जो उपयोगकर्ता प्रवेश के बाद एपीआई से प्राप्त किए गए हैं परिभाषित करने के लिए PermissionStore.defineManyPermissions उपयोग कर सकते हैं। यह सब स्पष्ट है।

तो मेरे पास दो मॉड्यूल हैं। एक प्रमाणीकरण मॉड्यूल है जो उपयोगकर्ता लॉगिन को संभालता है। दूसरा एक अनुमति मॉड्यूल है जो अनुमति सत्यापन को संभालता है। अनुमति मॉड्यूल .run() चरण पर, मैं इस तरह अनुमतियां निर्धारित:

var getPermissions = function() { 
     var deferred = $q.defer(); 
     system.permissions.get(
      function() { 
       return deferred.resolve(system.permissions._permissions); 
      }, 
      function (error) { 
       console.log("error if can't load permissions"); 
       console.log(error); 
      } 
     ); 

     return deferred.promise; 
    }; 
    var loadPermissions = function() { 
     var promise = getPermissions(); 
     promise.then(function (permissions) { 
      var arrayPermissions = formatPermissionArray(permissions); 
      //var arrayPermissions=['viewSeed','viewAuthentication']; 
      PermissionStore.defineManyPermissions(arrayPermissions, checkPermission); 

      console.log("from permission run service"); 
      console.log(arrayPermissions); 

     }, function (reason) { 
      console.log('Failed: ' + reason); 
     }, function (update) { 
      console.log('Got notification: ' + update); 
     }); 
    }; 

    loadPermissions(); 

    var formatPermissionArray = function (sourceData) { 
     var formatedPermissionArray = []; 
     for (var i = 0; i < sourceData.length; i++) { 
      formatedPermissionArray.push(sourceData[i].permissionId); 
     }; 
     return formatedPermissionArray; 
    }; 

लेकिन अनुप्रयोग के बूटस्ट्रैप के दौरान, इस मॉड्यूल को पहले से ही भरा हुआ है और arrayPermissions खाली के बाद से अभी तक उपयोगकर्ता में लॉग इन नहीं किया होगा ।

मैंने प्रमाणीकरण मॉड्यूल के लॉगिन नियंत्रक से अनुमति मॉड्यूल लोड करने के लिए oclazyload का उपयोग करने का प्रयास किया, जो वास्तव में काम करता है लेकिन यदि उपयोगकर्ता अपने पृष्ठ को रीफ्रेश/पुनः लोड करता है, तो अनुमति मॉड्यूल अब लोड नहीं किया जाएगा।

मैं webdevelpment के लिए नया हूं और angularjs के लिए भी नया हूं। बस कुछ महीने का अनुभव। मैं नहीं जानता कि मैं इसे एक पूर्ण गलत तरीके से कर रहा हूं। मेरे प्रश्न हैं:

  1. अनुमति सूची को पुनः प्राप्त करने के लिए API को प्रमाणीकरण की आवश्यकता होनी चाहिए? चूंकि मुझे यूआई-राउटर मार्गों पर उन प्रमाणीकरण को रखने की आवश्यकता होगी। कोई भी इसे वैसे भी देख सकता है। अगर मुझे उस एपीआई की रक्षा नहीं करनी चाहिए, तो मेरी समस्या हल हो गई है।

  2. यदि मुझे अपना एपीआई सुरक्षित रखना चाहिए, तो मुझे ऊपर बताए गए मुद्दों को कैसे संबोधित करना चाहिए और यह है कि कोणीय-प्रतिलेखन के लिए अनुमतियों को परिभाषित करना और अनुमतियों को पुनर्प्राप्त करने के लिए API का उपयोग कैसे करें।

मुझे उम्मीद है कि मैंने अपने मुद्दों का स्पष्ट रूप से वर्णन करने में कामयाब रहा है। किसी भी मदद या मार्गदर्शन की सराहना की जाती है।

सादर, लोला

उत्तर

1

मैं कोणीय Satellizer साथ कोणीय अनुमति उपयोग कर रहा हूँ। PermRoleStore या PermPermissionStorerun ब्लॉक में होना चाहिए। आप जेएसओएन वेब टोकन में डेटा जोड़ सकते हैं, इसे run ब्लॉक पर इस्तेमाल करें जैसे मैंने किया था।

$auth.getPayload() यह फ़ंक्शन लोकस्टॉरेज में जेडब्ल्यूटी से पेलोड लौटाता है।और उस पेलोड में इसमें भूमिका कुंजी के साथ डेटा है जिसे मैंने बैकएंड में सहेजा था। मुझे आशा है कि इससे आपकी समस्या में मदद मिलेगी।

.run(function (PermRoleStore, $auth, Yollar) { 
PermRoleStore  
.defineRole('ADMIN', function() { 
    if($auth.getPayload()) { 

    if ($auth.getPayload().data.role === 'ADMIN') { 
    return true; 
    } 
    else { 
    return false; 
    } 
} 
else { 
    return false; 
} 
}); 
PermRoleStore  
.defineRole('MODERATOR', function() { 
    if($auth.getPayload()) { 

    if ($auth.getPayload().data.role === 'MODERATOR') { 
    return true; 
    } 
    else { 
    return false; 
    } 
} 
else { 
    return false; 
} 
}); 
})