声明和查询数据行
本文关键字:数据 查询 声明 | 更新日期: 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一样。