2015-09-03 21 views
7

मेरी mvc5 परियोजना में अनाधिकृत उपयोगकर्ताओं मैं इसप्रयोग

@if (User.IsInRole("Admin") | User.IsInRole("Manager")) 
{ 
     @Html.ActionLink("Add New Record", "ProductTypeIndex", "ProductType") 
} 

पसंद आया लेकिन के लिए एक कार्य लिंक निष्क्रिय करने के लिए अगर वहाँ तो यह @if जाँच करने के लिए कई भूमिकाएँ हैं() लंबा हो जाता है इससे कैसे बचें? क्या मुझे इसके लिए कस्टम हेल्पर्स चाहिए (अगर ऐसा है तो मैं इसे कैसे देख सकता हूं)? मदद की सराहना की ..

उत्तर

23

आप अपनी खुद की विस्तार विधि लिख सकते हैं और इसे अपने कोड में इस्तेमाल कर सकते हैं।

public static class PrincipalExtensions 
{ 
    public static bool IsInAllRoles(this IPrincipal principal, params string[] roles) 
    { 
     return roles.All(r => principal.IsInRole(r)); 
    } 

    public static bool IsInAnyRoles(this IPrincipal principal, params string[] roles) 
    { 
     return roles.Any(r => principal.IsInRole(r)); 
    } 
} 

अब बस आप इस तरह इस विस्तार विधि कह सकते हैं:

// user must be assign to all of the roles 
if(User.IsInAllRoles("Admin","Manager","YetOtherRole")) 
{ 
    // do something 
} 

// one of the roles sufficient 
if(User.IsInAnyRoles("Admin","Manager","YetOtherRole")) 
{ 
    // do something 
} 

आप के रूप में अच्छी तरह से विचारों में इन विस्तार तरीकों का उपयोग लेकिन विचारों में अपने एप्लिकेशन तर्क लेखन से बचने के लिए के रूप में ज्यादा संभव के रूप में की कोशिश कर सकते जबकि चूंकि विचार आसानी से इकाई परीक्षण योग्य नहीं हैं।

+0

समाधान के लिए बहुत बहुत धन्यवाद :) देर से उत्तर के लिए खेद है। क्योंकि मैं कुछ दिनों के लिए stackoverflow नहीं आ सकता था। – Isuru

+1

मैंने प्राधिकृत विशेषता में समान स्ट्रिंग का उपयोग करने के लिए इसे उपयोग करने में सक्षम होने के लिए थोड़ा सा बदल दिया: 'प्राधिकरण (भूमिकाएं =" समूह 1, समूह 2, समूह 3 ")'। आप मेरा संस्करण [यहां] (https://gist.github.com/depuits/8ae37a2db0a44abea6bfc30c72349f27) पा सकते हैं। इस तरह आप इसका भी उपयोग कर सकते हैं: 'User.IsInAnyRoles (" group1, group2, group3 ")' – ColmanJ

-2
<% if (Page.User.IsInRole("Admin")){ %> 
+2

हालांकि यह कोड स्निपेट प्रश्न हल कर सकता है, [स्पष्टीकरण समेत] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) वास्तव में आपकी गुणवत्ता में सुधार करने में मदद करता है पद। याद रखें कि आप भविष्य में पाठकों के लिए प्रश्न का उत्तर दे रहे हैं, और वे लोग आपके कोड सुझाव के कारणों को नहीं जानते हैं। –

+0

यह अब तक का सबसे अच्छा और सरल उत्तर है, और पूरी तरह आत्म-व्याख्यात्मक है। –

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