2011-11-18 27 views
17

2 alanlı bir projem var/Yönetici ve/Kullanıcı.MVC rol tabanlı yönlendirme

Admin'nin varsayılan rota /Yönetici/Ev/Endeksi ve kullanıcının varsayılan rota /Kullanıcı/Ev/Index olduğunu.

kendi URL /Profil/Index gibi görünmek ama içerik göstermek için yapmak yönlendirme uygulamak mümkün mü /Yönetici/Ev yöneticileri için/Endeksi ve kullanıcılar için /Kullanıcı/Ev/Dizin ?

upd

Son olarak yapmak için öğrenmek o

context.MapRoute(
    "Admin", 
    "Profile/{action}", 
    new { area = AreaName, controller = "Home", action = "Index" }, 
    new { RoleConstraint = new Core.RoleConstraint() }, 
    new[] { "MvcApplication1.Areas.Admin.Controllers" } 
); 
... 
context.MapRoute(
    "User", 
    "Profile/{action}", 
    new { area = AreaName, controller = "Home", action = "Index" }, 
    new { RoleConstraint = new Core.RoleConstraint() }, 
    new[] { "MvcApplication1.Areas.User.Controllers" } 
); 

public class RoleConstraint : IRouteConstraint 
{ 
    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) 
    { 
     string roleName = db.GetRoleByUserName(httpContext.User.Identity.Name); 
     string areaName = route.Defaults["area"].ToString(); 
     return areaName == roleName; 
    } 
} 

O inşaat, fakat bana gelince o MVC yol değil. Bunu nasıl yapacaklarını bilen var mı?

cevap

4

Evet. Gösterdiğiniz örnek, Rota Kısıtlamaları'nı kullanmak için Microsoft tarafından sağlanan örneklerin çoğuna çok yakındır. Yönlendirme altyapısı, istek bir denetime geçirilmeden önce ön proxy (veya yönlendirici varsa) görevi görür. IRouteConstraint gibi öğeler tanımladığınız şeyi yapabilmeniz için tanımlanmıştır.

3

Bu çözümü belirtildiği gibi beğeniyorum, ancak akılda tutulması gereken tek şey, yönlendirme işleminin tek güvenlik biçimi olarak kullanılmaması gerektiğidir. Denetleyicilerinizi ve Eylemlerinizi [Authorize] özelliğiyle güvence altına almanız gerektiğini unutmayın, ancak erişimi sınırlandırırsınız.

İlgili konular