【发布时间】:2011-01-04 04:29:26
【问题描述】:
应如何构建 ASP.NET MVC 路由以允许对业务分支进行基于角色的精细访问控制?
每个业务实体都与一个分支相关联,无论是单独还是通过其父实体。是否有一种优雅的方法可以根据用户角色为任意数量的分支授权操作?
1。路线中的{branch}?
{branch}/{controller}/{action}/{id}
行动:
[Authorize(Roles="Technician")]
public ActionResult BusinessWidgetAction(BusinessObject obj)
{
// Authorize will test if User has Technician role in branch context
// ...
}
2。从业务实体中检索分支?
{controller}/{action}/{id}
行动:
public ActionResult BusinessWidgetAction(BusinessObject obj)
{
if (!User.HasAccessTo("WidgetAction", obj.Branch))
throw new HttpException(403, "No soup for you!"); // or redirect
// ...
}
3。还是有更好的方法?
【问题讨论】:
-
看看你的另一个问题——我的感觉是你需要重新考虑你的访问/安全的工作方式。我理解对精细控制的需求,而且您似乎需要许多限制 - 这对我来说是重新思考的迹象。
-
@Ahmad:我应该查看 ACL 吗?
-
不太确定 ACL .. 但是我使用
custom membership provider会有所帮助。您希望authorize actions based on user-roles对于默认会员提供程序来说足够简单,但是额外的限制是for any number of branches- 这实际上是角色-> 分支(例如,用户在某些分支中处于管理员角色)关系或用户-> 分支(想不出例子)关系。我可能会遗漏一些东西! -
我有一个表格供
Branches(例如开普敦)、Roles(例如管理员、技术人员)和Users(约翰、吉尔、彼得)使用。使用UserRoles表跟踪 user、branch 和 role,例如。 (彼得,开普敦,Techie)。我喜欢 Runeborg 的回答:stackoverflow.com/questions/1335315/… -
我已经在使用自定义成员资格和角色提供程序。
标签: asp.net-mvc asp.net-mvc-routing roles access-control