声明和查询数据行

本文关键字:数据 查询 声明 | 更新日期: 2023-09-27 18:02:43

在本文(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)查询银行账户并与索赔表(或缓存数据)连接。

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

声明和查询数据行

声明只是名称-值对。对用户id进行自定义声明是完全有效的。

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