这真让我烦恼,但无论我读什么,我似乎都无法理解如何解决这个问题。
我知道我们可以为用户分配角色。这些角色允许完成某些活动(控制器中的CRUD操作)。
但是我们如何限制这适用的数据? 这些规则在哪里可以轻松写下来,以便我的控制器不会变得非常混乱?
一个超级基本的例子是:
工厂经理可以更新有关自己工厂的信息,但不能更新其他工厂的信息。 (但他们可以阅读那些数据)
当然,这可以通过多种方式轻松实现,但实际上我有更复杂的系统(FactoryManagers,FactoryWorkers,SupplyManagers,SupplyWorkers),需要一个非常强大的解决方案。以下是一些想法:
baseRead
baseEdit
baseUpdate
baseDelete
。这些查询返回可以为特定用户执行的操作的列表。然后将它们与用户指定的ID组合,如果它不在子集中,则不返回任何内容。提前致谢。
答案 0 :(得分:1)
使用自定义授权过滤器,这只是这种情况可用的一种方法
以下是SO中另一个答案的摘要代码段。
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;
}
//do your custom checks here
//based on your custom security scenarios and return true or false
}
}
用法
[AuthorizeUser(AccessLevel = "Create")]
public ActionResult CreateNewItem()
{
//...
return View();
}
有关详细信息,请参阅以下内容
ASP.NET MVC 4 Custom Authorize Attribute with Permission Codes (without roles)
http://www.codeproject.com/Articles/577776/Filters-and-Attributes-in-ASPNET-MVC