2015-01-12 4 views
1

благодарим Вас за ответ, я добавил BeginExecuteCore в базовом контроллере, как этого `класса BaseController общественности: контроллер { защищено переопределение IAsyncResult BeginExecuteCore (AsyncCallback обратного вызова, состояния объекта) { // string email = string.Empty; dbEntities dbcontext = new dbEntities();AttributeRouting: Несколько маршрутов на основе ролей пользователей

 var userRoleName = (from n in dbcontext.VAgentClientEmails where n.Email == User.Identity.Name select n.Role).FirstOrDefault(); 

     if (userRoleName == "SuperAdmin") 
      RouteData.Values["role"] = userRoleName; 

     else 
      RouteData.Values["role"] = ""; 

     return base.BeginExecuteCore(callback, state); 
    }` 

и я дал в домашнем контроллере, как этот

[Route("~/{role}/SavedSearch/Index")] public ActionResult Index() { ... }

его рабочий для администратора/savedsearch/индекс , а также, если я дать fjsdfk/savedsearch/индекс его работы в вышеуказанном случае он не должен работать ..

и в остальное случае я не хочу роль

Мне нужно сделать какие-либо изменения?

+0

не хотят, чтобы показать имя контроллера? –

ответ

0

Чтобы добавить роль пользователя в URL определить маршрут, как это:

[Route("~/{role}/propertysearch/Index")] 
public ActionResult Index() 
{ 
    // ... 
} 

и добавить этот метод к контроллеру. когда контроллер начинает выполняться, роль пользователя будет добавлена ​​к пользователю:

protected override IAsyncResult BeginExecuteCore(AsyncCallback callback, object state) 
{ 
    var userRoleName = //GetUserRoleName; 
    RouteData.Values["role"] = userRoleName; 
    return base.BeginExecuteCore(callback, state); 
} 

в этом случае URL будет как:

админы/propertysearch/индекс

пользователя/propertysearch/индекс

otherMemberRoleName/propertysearch/index

Для всего приложения Добавить контроллер и назовите его BaseController затем добавьте BeginExecuteCore метод к Basecontroller:

public class BaseController : Controller 
{ 
    protected override IAsyncResult BeginExecuteCore(AsyncCallback callback, object state) 
    { 
     var userRoleName = //GetUserRoleName; 
     RouteData.Values["role"] = userRoleName; 
     return base.BeginExecuteCore(callback, state); 
    } 
} 

Все другие контроллеры наследуют форму BaseController:

public class HomeController : BaseController 
{ 
    [Route("~/{role}/propertysearch/Index")] 
    public ActionResult Index() 
+0

спасибо за ваш ответ вместо роли я хочу только 5 ролей, если я дам другую строку, она не должна работать, если это так, что я должен делать? – user3664368

+0

Вы должны добавить ограничение на маршрут, который принимает только желаемые роли. –

+0

Могу ли я добавить вышеуказанный метод в global.asax вместо добавления каждого контроллера? Так что это может быть общим для всего приложения, если я так же добавлю, как обращаться к каждому контроллеру с использованием ограничения маршрута – user3664368

Смежные вопросы