1

在 Windows Identity Foundation (WIF) 中,有一个名为ClaimsPrincipalPermission. MSDN 上的文档非常稀少。它指出:

ClaimsPrincipalPermission 表示访问资源所需的权限。ClaimsPrincipalPermission 接受一个表示要访问的资源的字符串和一个表示要对资源执行的操作的字符串。调用 Demand 时,principal 必须具有对指定资源执行指定操作的权限,否则 Demand 会抛出异常。

这很酷。它允许我在函数上设置属性并使其只有授权用户才能调用该函数。我可以毫不费力地使用此功能。

但是,还有另一个问题。我正在开发一个具有许多功能的 Web 应用程序,这些功能只允许某些用户访问。我希望将我的页面编码为仅显示具有登录用户可以访问的功能的页面的链接。

我看到使用 ClaimsPrincipalPermission 执行此操作的唯一方法是执行以下操作:

   Dim foo As ClaimsPrincipalPermission
    foo = New ClaimsPrincipalPermission(resource:="SECRET_FUNCTION", action:="EXECUTE")
    Try
        foo.Demand()
        response.write(Link_To_Execute_Secret_Function)
    Catch ex As Exception
        response.write("No access to Secret Function")
    End Try

我的主管向我明确表示,这种“异常编码”是不可接受的。我确信我可以将这类东西封装在一个小型库中,但我想知道 WIF 打算如何用于此目的。

顺便说一句,我知道 WIF 允许我自动检查对特定网页的访问,但该项目的架构师希望指定要限制的函数名称,而不是网页 URL。

最好的办法是什么?

更新

到目前为止,我发现的最好的事情是通过异常封装编程以减轻后果......

4

2 回答 2

0

也许晚了几年,但你想与ClaimsAuthorizationManager

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
Thread.CurrentPrincipal = ClaimsPrincipal.CreateFromPrincipal(Thread.CurrentPrincipal);

ClaimsAuthorizationManager cam = new ClaimsAuthorizationManager();
if (cam.CheckAccess(new AuthorizationContext((IClaimsPrincipal)Thread.CurrentPrincipal, "SECRET_FUNCTION", "EXECUTE")))
{
    Response.Write(Link_To_Execute_Secret_Function) 
}
于 2012-06-13T10:42:11.593 回答
0

哪些用户/角色/可以访问某些页面的任何内容都存储在某个表中?如果是这样,您可以访问它吗?某些功能的用户权限是否也在数据库中?如果是、是、是,那么您希望通过您自己的对象模型而不是通过 WIF 更直接地从数据库中呈现页面上的链接。这会很干净。根据来自 WIF 的信息编写菜单选项(我认为必须在每一页上完成?)听起来既繁琐又笨重。

于 2010-04-13T14:12:59.417 回答