2011-01-06 15 views
22

Görünümümde, kullanıcı rolüne göre gizlemek ve göstermek istediğim bazı yönetici bağlantılarına sahip olmak istiyorum.ASP.NET MVC İçindeki rolü kontrol et

<%= if(CHECK IF USER ROLE ADMIN) { %> 
     <div class="tools"> 
      <ul> 
       <li class="edit"><%= Html.ActionLink("Edit", "Edit", new { id = Model.storyId }) %></li> 
       <li class="delete"><%= Html.ActionLink("Delete", "Delete", new { id = Model.storyId }) %></li> 
      </ul> 
     </div> 
<%= } %> 
+7

sadece kendi eylem bu denetimi gerçekleştirmek ve ViewData karma içine veya bir şekilde değer koymak isteyebilirsiniz Görüşlerinizi tutmak için viewmodel özelliği. – R0MANARMY

+0

Basit bir if ifadesi kullanarak görünümü kontrol etmeyi tercih ederim. Daha önce yaptım ama kodu hatırlayamıyorum. – Cameron

+1

Sadece bunu daha önce yaptığınız için harika bir fikir değil. Görüşünüze koyduğunuz herhangi bir kodu hatırlayın (önemsiz), (en azından kolayca) sınamalara karşı veya yeniden yazmayı yazamayacağınız bir koddur. Rob Connery, bir süre önce [Tag Çorbasından Kaçınmak] için harika bir yazı yazdı (http://blog.wekeroad.com/blog/asp-net-mvc-avoiding-tag-soup/). – R0MANARMY

cevap

22
<% if (Page.User.IsInRole("Admin")){ %> 

<%}%> 

Ancak bu bence çok kötü bir fikir. ViewData veya Model'in, görünümün gösterileceği yeri temsil etmesine izin vermek daha iyidir ve görünüm yalnızca görünüm verilerini kontrol edebilir. Bir denetleyici taban sınıfı veya bir eylem filtresi, bu işlemin tekrar tekrar kullanımını kolaylaştırabilir ve kodun tek bir yerde bulunmasına izin verebilir.

+0

Genellikle bu tür bilgileri bir denetleyiciden göndermek için bir ViewModel kullanıyorum. Ancak, ana _Layout.cshtml temellerimde bazı şeyleri rollere göre göstermeye çalışıyorum. Sadece nasıl "korkunç" fikirdir ve neden? Sadece bir sınıf eklemek için ve orada içerik göstermek ve gizlemek için güçlü yazılan kısmi görünümler oluşturmak için buna değer mi yoksa _Layout paramın bir yardımcı yönteminin bu seçme kullanımı mıdır? Genelleşmiş iddialar hakkında, "şeylerin korkunç şeyler" olduğu konusunda endişeleniyorum. – Methodician

+0

Görünüm modelinde, denetleyicideki (veya denetleyicinin kullandığı bir sınıf) tüm roller mantığını gösterecek ve gösterecek şekilde tanımlamanız ve görünüm modelini uygun şekilde atamanız yeterlidir. Doğrudan kontrol etmek hala işe yarıyor, ancak daha büyük projelerde daha az bakım gerektirecek ve ele alınacak görüşün daha da karmaşıklaşmasına neden olacak. – CRice

+0

Aradığın değere veya durumunuza göre arama yapabilirsiniz. – CRice

0

Diğerlerinin çoğu, bu verilere, denetleyici veya diğer ticari hizmetler tarafından "önceden belirlenmiş" olarak sağlanmalıdır, oysa Görünüm yalnızca, mümkün olduğunca, html biçimlendirme ve dil denetim yapılarını kullanır. vb vb jquery, css gibi diğer tipik web sayfası bina güzellikler kullanarak "sayfasını eti dışarı"

+1

İfadenizi tam olarak anlayamıyorum, yeniden ifade edebilir misiniz? –

38
@if (this.User.IsInRole("Administrator")) 
{ 

} 
+2

Bu kabul edilen cevap olmalı. Bunu kullanarak –

+1

. sorunu çözdü – PAVITRA