【问题标题】:Routing Business Branches: Granular access control in ASP.NET MVC路由业务分支:ASP.NET MVC 中的粒度访问控制
【发布时间】: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 表跟踪 userbranchrole,例如。 (彼得,开普敦,Techie)。我喜欢 Runeborg 的回答:stackoverflow.com/questions/1335315/…
  • 我已经在使用自定义成员资格和角色提供程序。

标签: asp.net-mvc asp.net-mvc-routing roles access-control


【解决方案1】:

我最终在每个业务分支的不同应用程序和数据库上使用了相同的代码库。这意味着我必须单独更新每个,但允许功能分叉。

我推出了自己的 [BranchAuthorize(Roles = "Editor, Stock Keeper")] 属性,该属性检查已验证用户的角色与控制器操作所需的角色,如果未分配所需角色,则显示一条消息详细说明所需角色。

统一的分支访问控制需要单独的授权服务,但允许集中权限管理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    相关资源
    最近更新 更多