如何将用户限制为ASP.Net 2.0+中的数据子集

|| 想象一下一个ASP.Net 2.0+应用程序,它使用内置的基于角色的安全性将用户限制在某些页面或操作上。 进一步假设存在规则,这些规则根据用户的属性(但是实现这些属性)将单个用户限制为数据子集。例如,经理只能查看其下属的绩效历史记录。销售经理只能查看自己销售代表的销售目标成就信息。销售代表只能查看自己客户的待处理订单。 这些规则影响下拉菜单和其他多记录显示的填充方式,以及可以在文本框中键入哪些值以进行搜索和查找。还有许多其他可能的功能和屏幕类型可能会受到影响。因此,这是一个跨应用程序的问题。 我的问题是:什么样的模式或技术可以使跨应用程序的限制更容易实现?     
已邀请:
        考虑使用您自己的自定义属性来解决这些交叉问题,并可能使用基于声明的身份系统(例如IClaimsIdentity-Windows Identity Foundation)来实现所需的属性。 由于您是根据用户在此处控制数据-由于您绑定数据等,因此我还将研究Webform的Model View Presenter模式。 请参阅:http://msdn.microsoft.com/en-us/library/ff647117.aspx 这使您可以根据所拥有的任何定义的权限更好地测试输出,并提供了一种更好的方法来跟踪到组合框的绑定等,这比在代码中添加一堆垃圾要好。     
        您可以实现存储库模式。然后,当您对其进行调用时,您将传入当前用户并限制基于该用户返回的数据,或者在构建存储库时传入该用户。 储存库模式 有些像
public class DataRepository
{
    private _user;

    public DataRepority(User user)
    {
         _user =user;    
    }

    public IEnumerable<SalesData> GetMonthlySalesData(User user)
    {
        //code here
    }
}
    
        自从OP提出最初的问题以来,桥下已经流了很多水。那时提供的答案很棒,但是都需要编码。 从那时起,由NIST提出的基于属性的访问控制(abac)已经相当成熟。 ABAC可帮助您将授权逻辑表示为可配置的策略,您可以在中央策略决策点中定义,维护和执行这些策略。 有几种实现ABAC的解决方案。我建议您查看Wikipedia以获得更多信息。     

要回复问题请先登录注册