0

想象一个 ASP.Net 2.0+ 应用程序,它使用内置的基于角色的安全性来限制用户访问某些页面或操作。

进一步假设存在将单个用户限制为基于用户属性的数据子集的规则(但是这些属性是实现的)。例如,经理只能查看他或她自己下属的绩效历史。销售经理只能查看他或她自己的销售代表的销售目标成就信息。销售代表只能查看他或她自己客户的待处理订单。

这些规则会影响下拉列表和其他多记录显示的填充方式,以及可以在文本框中输入哪些值以进行搜索和查找。还有许多其他可能的功能和屏幕类型可能会受到影响。所以这是一个跨应用程序的问题。

我的问题:什么样的模式或技术会使在应用程序中实现这些限制更容易?

4

3 回答 3

3

您可以实现存储库模式。然后,当您调用它时,您传入当前用户并限制基于该用户返回的数据,或者在构建存储库时传入用户。

存储库模式

有些喜欢

public class DataRepository
{
    private _user;

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

    public IEnumerable<SalesData> GetMonthlySalesData(User user)
    {
        //code here
    }
}
于 2011-06-06T21:52:56.817 回答
1

自OP最初的问题以来,桥下已经有很多水了。当时提供的答案很好,但它们都需要编码。

此后,NIST 提出的访问控制模型基于属性的访问控制( ABAC 帮助您将授权逻辑表达为可配置的策略,您可以在中央策略决策点外部定义、维护和执行这些策略。

有几种实现 ABAC 的解决方案。我建议您查看维基百科以获取更多信息。

于 2016-06-10T00:39:35.947 回答
0

考虑为这些横切关注点使用您自己的自定义属性,并可能使用基于声明的身份系统(例如 IClaimsIdentity - Windows Identity Foundation)来实现所需属性。

由于您在此处根据用户控制数据 - 由于您正在绑定数据等,因此我还将研究 Web 表单的模型视图演示器模式等。请参阅:http: //msdn.microsoft.com/en-us/library/ff647117。 aspx 这使您可以根据您拥有的任何定义的权限更好地测试您的输出,并提供一种更好的方法来跟踪您与组合框等的绑定,而不是在您的代码中粘贴一堆垃圾。

于 2011-06-06T23:49:03.707 回答