声明和查询数据行

时间:2014-05-11 17:49:28

标签: c# asp.net-mvc-5 claims-based-identity

在本文(http://www.codemag.com/Article/0001308101)中,建议声明可用于对某些类型的数据行访问进行扩展/拒绝。

更具体一点:文章提到:

public void ProtectedMethod()
{
    ClaimsPrincipalPermission.CheckAccess("bankaccount|1234", "Read"); 
    // Perform protected task.
}

在我看来(如果我错了,请纠正我)这表明可以使用声明来管理对数据行的访问(在这种情况下是银行帐号)。

到目前为止,我得到的图片并发现这是可行的(我认为)。

现在,想象一下我想查询用户可以访问的所有帐号的列表。在未声明的场景中,我们可以查询数据库,如:

var list = db.BankAccounts.Where(c => c.UserId == userId); 

在基于声明的场景中,它意味着(仅仅是一个示例场景):

var list = db.BankAccounts.Where(c => 
    ClaimsPrincipalPermission.CheckAccess("bankaccount|1234", "Read"))

但这感觉不对。

我错过了一个关键部分吗?或者以这种方式保护对数据行的访问不是一个好主意吗?

更新

在阅读了Wiktor Zychla的回答和评论后,我仍然感到困惑:目前索赔存储在索赔表中。 BankAccounts存储在另一个表中。

基本上我认为这是选项:

1)查询银行账户并加入声明表(或缓存数据)。

但我仍然不确定这是正确的方法。

1 个答案:

答案 0 :(得分:1)

声明只是一对名称值。拥有用户ID的自定义声明完全有效。

这意味着您不必坚持使用此CheckAccess方法。相反,找到所需的声明(用户名,用户ID,无论如何)并使用它的值,就像在前一个示例中使用id一样。