0

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

4

1 回答 1

0

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

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

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

于 2011-01-03T20:29:26.557 回答