System.Web.Mvc.AuthorizeAttribute'dan türetilen özel bir yetkilendirme özniteliği yazdım. Belirli özelliklere erişimi kısıtlamak için kontrolörlerimden başarıyla kullanıyorum.Yetkilendirme kodu mantığının çoğaltılması nasıl engellenir
public class ArticleController : Controller
{
[CustomAuthorize(Role.Administrator)]
public ActionResult Delete(int id)
{
// ...
}
}
Ve bu iyi çalışıyor. Şimdi HTML öğelerini aynı yetkilendirme mantığına göre göstermek veya gizlemek istiyorum. Örneğin, "Makale" görünümünde, kullanıcı yönetici değilse "Sil" eylem düğmesini gizlemek istiyorum.
<ul id="menu">
<li>@if (User.IsInRole(Role.Administrator)) {
@Html.ActionLink("Delete", "Delete", "Article", new { id = article.ID }, null)
} </li>
</ul>
O da gayet iyi çalışıyor, ancak bir eylemi gerçekleştirmek için iki kez gerekli credientials belirtmeniz gerekir çünkü kod mantık tekrarını oluşturur: Böyle bir şey yazdık kontrolörü olarak
- eylemi engellemek veya izin vermek.
- Eylem linkini göstermek veya gizlemek için.
Bu çoğaltmanın önlenmesinin en iyi yolu nedir? Özel yetkilendirme özelliğimi görünümlerden yeniden kullanmanın bir yolu var mı?