使用而不使用SimpleMembershipProvider
有没有办法使用……
[Authorize(Roles: "Administrator")] public class SomeController : Controller { ... }
…使用我自己的Roles
数据库表,而不使用SimpleMembershipProvider
?
我的Users
和Roles
模型类:
[Table("Users")] public class UserModel { [Key] public Int32 ID { get; set; } [Required] public String Name { get; set; } [Required] public String Password { get; set; } [Required] public virtual RoleModel Role { get; set; } } [Table("Roles")] public class RoleModel { [Key] public Int32 ID { get; set; } [Required] public String Name { get; set; } public virtual ICollection Users { get; set; } }
有人有同样的问题吗?
您应该通过inheritanceAuthorizeAttribute
类来创建自己的Authorize
属性
public class CustomAuthorizeAttribute : AuthorizeAttribute { }
然后你可以随意配置它。
您还可以在Stackoverflow上查看以下问题:
- 自定义授权属性
- ASP.NET MVC 4使用权限代码自定义授权属性(无角色)
我遇到了同样的问题,我使用了自定义属性。 但我的角色并不那么复杂。 我需要能够为用户提供多个角色,所以我只是使用字符串集合来做到这一点。 我用过这个自定义filter
CustomAuthorize(UserRole="AUTHORIZED_ROLE");
public class CustomAuthorizeAttribute : AuthorizeAttribute { public string UserRole { get; set; } protected IUnitOfWork uow = new UnitOfWork(); protected override bool AuthorizeCore(HttpContextBase httpContext) { var isAuthorized = base.AuthorizeCore(httpContext); if (!isAuthorized) { return false; } var currentUser;//Get Current User if(UserRole==currentUser.Role.Name) { return true; } return false; } protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) { filterContext.Result = new RedirectToRouteResult( new RouteValueDictionary( new {//redirect where you want to in case of not authorized. controller = "Home", action = "AccessDenied" }) ); }