Я написал собственный атрибут фильтра для проверки на каждое действие контроллера, если пользователь имеет право доступа к этому действию, я предоставляю доступ, иначе я перенаправляю на контроллер Несанкционированный доступ, вот мой код:Общий способ скрыть ActionLinks, проверив право доступа
public class AuthorizationAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
string actionName = filterContext.ActionDescriptor.ActionName;
string controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
if (!CheckAccessRight(actionName, controllerName))
{
string redirectUrl = string.Format("?returnUrl={0}", filterContext.HttpContext.Request.Url.PathAndQuery);
filterContext.HttpContext.Response.Redirect(FormsAuthentication.LoginUrl + redirectUrl, true);
}
else
{
base.OnActionExecuting(filterContext);
}
}
}
Вот мой CheckAccessRight Метод:
private bool CheckAccessRight(string Action, string Controller)
{
if (HttpContext.Current.Session["userId"] != null)
{
string userID = HttpContext.Current.Session["userId"].ToString();
using (var db = new cloud_clinicEntities())
{
assignment objAss = db.assignments.SingleOrDefault(model => model.userid == userID);
String UserRole = objAss.itemname;
itemchildren objChild = db.itemchildrens.SingleOrDefault(model => model.parent == UserRole && model.child == Controller + " " + Action);
if (objChild != null)
{
return true;
}
else
{
return false;
}
}
}
else
{
return false;
}
}
теперь я хочу на моем каждого вида, если есть ссылка действия на действия контроллера, который пользователь не имеет права доступа к нему не должно быть вынесено на странице или он должен быть скрыт. Как это сделать в общем виде, у меня есть идея, которую я могу сделать, добавив инструкцию if для каждой Action Link, но я не думаю, что ее лучший подход.
возможно дубликат [Role-контента на основе asp.net MVC] (http://stackoverflow.com/questions/928654/role-based-content-asp-net-mvc) –