C#基于角色的安全性

时间:2010-11-19 13:34:01

标签: c# .net security

我有一个包含我的数据库访问层的类库,我在所有与这个DB一起使用的项目中使用它,现在我想在这个库中集成安全性,这样我就可以为不同的安全角色返回不同的数据。使用.NET内置安全性实现此目的的最佳方法是什么? 我正在考虑使用System.Security.Permissions.PrincipalPermission但我看不出它如何帮助我,因为任何使用我的库的人都可以编写像这样的客户端应用程序

GenericIdentity genericIdentity = new GenericIdentity("User");
GenericPrincipal genericPrincipal = new GenericPrincipal(genericIdentity, new[] { "Administrator" });
Thread.CurrentPrincipal = genericPrincipal;

他们将通过我所有的主要许可要求

PrincipalPermission principalPermission = new PrincipalPermission(null, "Administrator");
principalPermission.Demand();

甚至没有验证。 要么我不理解这个安全模型,要么它不会保护任何东西。

2 个答案:

答案 0 :(得分:5)

基于角色的安全性旨在使库代码能够使用客户端选择的安全模型,而无需了解实现;关键在于您已经处于合理地信任客户端安全模型的位置,并且您只是想根据客户端做出的决策提供适当的选项(例如作为登录过程的一部分)。

如果信任客户端,所有投注都是 ,因为他们可以使用反射将内部内容撕成碎片。在这种情况下,最好将该实现代码保密,例如通过以某种方式接受用户凭据的Web服务。然后他们只能是他们拥有凭据的帐户。

答案 1 :(得分:0)

public class Example
{

  // Will enforce that the user have the administrator role
  [PrincipalPermission(XXXX, Role="Administrator")]
  public void Remove(int userId)
  {
  }

  public void Add(int userId)
  {
     if (!Thread.CurrentPrincipal.IsInRole("User"))
        throw new UnauthorizedAccessException("Only registered users may add users");
  }

}

如何设置实际的主体/身份配置取决于您的库的用户。