I have created custom authentication and authorization for my users. The problem I am facing is how to get mvc to check that the role from my user table matches [Authorize (Role)] on my controller in order to set httpauthorised to true. Below is my customauthorise class.
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)] public class CustomAuthorizeAttribute : AuthorizeAttribute { public override void OnAuthorization(AuthorizationContext filterContext) { base.OnAuthorization(filterContext); if (!filterContext.HttpContext.User.Identity.IsAuthenticated) { filterContext.Controller.TempData["ErrorDetails"] = "You must be logged in to access this page"; filterContext.Result = new RedirectResult("~/User/Login"); return; } if (filterContext.HttpContext.Request.IsAuthenticated) { using (var db = new GManagerDBEntities()) { var authorizedRoles = (from u in db.Users where u.Username == filterContext.HttpContext.User.Identity.Name select u.Role).FirstOrDefault(); Roles = String.IsNullOrEmpty(Roles) ? authorizedRoles.ToString() : Roles; } } if (filterContext.Result is HttpUnauthorizedResult) { filterContext.Controller.TempData["ErrorDetails"] = "You do nat have necessary rights to access this page"; filterContext.Result = new RedirectResult("~/User/Login"); return; } } public CustomAuthorizeAttribute(params object[] roles) { if (roles.Any(r => r.GetType().BaseType != typeof(Enum))) throw new ArgumentException("roles"); this.Roles = string.Join(",", roles.Select(r => Enum.GetName(r.GetType(), r))); } }
Below is my controller with decoration
[CustomAuthorize(Role.Administrator)] [HttpGet] public ActionResult CreateEmployees() { return View(); }
and my listing for the role
public enum Role { Administrator = 1, UserWithPrivileges = 2, User = 3, }
and model
public class UserModel { public int UserID { get; set; } [Required] [Display(Name="Username:")] public string Username { get; set; } [Required] public string Password { get; set; } public int Role { get; set; } }
see mouth for a clear pastie view
the links that I looked through, trying to solve this problem among others, but I can not combine it MVC 3 Authorize user roles http://forums.asp.net/p/1573254/3948388.aspx
Custom authorization attribute in MVC 4 with roles
source share