Чтобы разрешить пользователям и администраторам сайта для просмотра/добавлять/редактировать/удалять данные в моем приложении я решил на этом маршруте:уменьшить повторяющийся код в действиях контроллера
routes.MapRoute("ClientRoute",
"{account}/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" });
что приводит к маршрутам, как: mvcapp.net/ 1234/контакты/добавить.
Чтобы пользователи (кроме админов) не могли получить доступ к другим данным клиента, я добавил в свои действия контроллера следующий код.
...
var model = repos.GetSomeData();
if (User.IsInRole("Admin") == false) {
if (account == Profile["Client"])
return View(model);
else
return View("WrongClient");
}
...
Каков наилучший способ для этого?
РЕШЕНИЕ Я ПОШЕЛ С
public class BaseController : Controller {
protected override OnActionExecuting(ActionExecutingContect filterContext) {
if (filterContext.RouteData.Values["account"] != null) {
string client = filterContext.RouteData.Values["account"].ToString();
if (User.IsInRole("admin") == false) {
if (Profile.Clients.Contains(account) == false)
filterContext.Result = new ViewResult() {ViewName = "WrongClient"};
}
}
}
}
HttpContext.Profile –
В этом случае я рекомендую просто проверить, соответствует ли «клиент» идентификатору пользователя (при условии, что вы используете clientid как User.Identity.Name). – Omar
Ответ Paul Balmire (5-я или 6-я запись) привел меня к решение, которое я выбрал. –