路由业务分支:ASP.NET MVC中的粒度访问控制

时间:2010-04-28 22:30:47

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

如何构建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。或者有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

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

我推出了自己的[BranchAuthorize(Roles = "Editor, Stock Keeper")]属性,该属性根据控制器操作所需的角色检查经过身份验证的用户的角色,并显示详细说明所需角色的消息(如果没有分配)。

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