我正在使用 ASP.NET/MVC 并且需要向 ActionResult/ViewResult 控制器方法添加一些安全措施。基本上我需要确保用户与与页面关联的同一组织相关联,他们拥有什么级别的访问权限,并在需要时重定向他们。
我通常会为此使用属性,但需要使用一些业务逻辑来确定返回视图/重定向的位置,并且我需要在执行此操作之前使用查询字符串值初始化一个非常量用户定义对象。我想通过可能使用辅助类(对建议开放)来集中逻辑,但我不确定如何访问上下文/从辅助类进行重定向。
例如,页面操作就像...
public ActionResult Index(string id)
{
Models.Bucket bucket = new Bucket();
InitBucket(bucket, id);
SecurityHelper.UserOrganisationMatchesObjectOrganisation(CurrentUser, bucket);
}
在 SecurityHelper 中
public static void UserOrganisationMatchesObjectOrganisation(Model.User user, Bucket bucket)
{
//if various logic in user and bucket occur return View("NewPage", bucket)
//else return RedirectResult("~/yournotallowed")
}
唯一的问题是您不能在没有上下文的情况下在辅助方法中重定向/返回视图,并且不确定如何将其从控制器传递给辅助类或是否可能。
我确信有更好的方法来做到这一点,比如使用服务,或者使用属性并能够传递我初始化的存储桶对象。
欢迎任何建议!
谢谢