我正致力于分离MVC中的问题。目前所有内容都混淆了(库函数,扩展,自定义过滤器属性,数据访问级别),但我希望有两个独立的项目(MySolution.Lib和MySolution.DBModel)。我想将自定义过滤器属性分离到Lib项目。 DBModel已经引用了Lib,所以除了这个之外,我已经完成了所有工作。实现这个的最佳方法是什么?是否可以传递给另一个自定义属性中的属性值,并且只对属性实现中的文本起作用。所以属性将使用这样的东西:
[AuthorizeUser(AccessLevel = "Admin", UserRights = DBModel.User.GetUserRights(HttpContext.User.Identity.Name)]
public ActionResult MyAction()
这是当前的实施
public class AuthorizeUserAttribute : AuthorizeAttribute
{
// Custom property
public string AccessLevel { get; set; }
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var isAuthorized = base.AuthorizeCore(httpContext);
if (!isAuthorized)
{
return false;
}
List<string> accessLevels = AccessLevel.Split(new[] {','}).ToList();
//this is taken from DB by GetUserRights() method from MySecurity static class
var privilegeLevels = MySecurity.GetUserRights(httpContext.User.Identity.Name);
return accessLevels.Any(privilegeLevels.Contains)
|| privilegeLevels.Contains("Admin") || privilegeLevels.Contains("Super User");
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
var helper = new UrlHelper(filterContext.RequestContext);
filterContext.HttpContext.Response.Redirect(helper.Action("Index", "Unauthorized"));
}
}