gpt4 book ai didi

c# - LINQ-to-SQL 中的记录级安全性

转载 作者:太空宇宙 更新时间:2023-11-03 16:53:20 25 4
gpt4 key购买 nike

我正在为 LINQ-to-SQL 应用开发记录级安全系统。我目前有一个围绕 DataContext 的 GetTable 方法的包装器,该方法将 T 连接到用户交叉引用表。 T 是任何实现我的 ISecurable 接口(interface)的类:

public interface ISecurable
{
bool CanRead { get; set; }
bool CanUpdate { get; set; }
bool CanDelete { get; set; }
}

我的基本存储库类执行连接并为指定用户更新每个故事的 CanRead、CanUpdate 和 CanDelete 属性:

var storiesVisibleToUser = repository.Get<Story>( user );

我想用扩展方法替换包装器,所以我可以这样做:

var storiesVisibleToUser = repository.Get<Story>().ApplySecurity( user );

这是一个微妙的变化,但会大大降低安全代码和一般数据访问代码之间的耦合,因此它会给我更多的灵 active 来添加诸如组级安全性之类的内容。

问题在于 ApplySecurity 扩展方法无法访问原始 DataContext,因此它无法使用 GetTable<> 检索交叉引用记录。

两个问题:

  1. 有没有办法得到 IQueryable 的 DataContext,缺少 subclassing/wrapping it and passing the context in to the constructor? ?

  2. 扩展方法是执行此操作的“正确”方法,还是我应该坚持在我的存储库中使用可以访问原始上下文的方法?

最佳答案

一个可能的解决方案是在故事和交叉引用表之间创建关联。这样一来,另一个表可用于 Story 查询,而无需引用原始上下文。

关于c# - LINQ-to-SQL 中的记录级安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3150166/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com