我正在构建一个系统,其中一些用户可以访问某些数据而不是其他用户.
如何保护我的应用程序以便用户A可以访问
/Product/1/Edit 但不是 /Product/2/Edit
我正在考虑为此使用动作过滤器.这是正确的方法吗?
是的,自定义授权操作过滤器是执行此操作的好地方.以下是您可以继续的方式:
public class MyCustomAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (!(filterContext.Result is HttpUnauthorizedResult))
{
var currentUser = filterContext.HttpContext.User.Identity.Name;
var currentAction = filterContext.RouteData.GetRequiredString("action");
var id = filterContext.RouteData.Values["id"];
if (!HasAccess(currentAction, currentUser, id))
{
HandleUnauthorizedRequest(filterContext);
}
}
}
private bool HasAccess(string currentAction, string currentUser, object id)
{
// TODO: decide whether this user is allowed to access this id on this action
throw new NotImplementedException();
}
}
Run Code Online (Sandbox Code Playgroud)