2011-09-27 96 views
3

我正在使用C#(.NET 4.0)中的Windows应用程序,并且需要某些内容来实现一些基本的ACL规则,或者更具体地说,应用基于用户类型的某些配置。C#Windows应用程序中的基于许可证的配置

该应用程序具有许可证密钥,我们可以使用这些许可证密钥来确定用户类型(即用户,安装人员,工程师)以及其他信息。

根据用户的类型,某些功能,菜单,按钮和显示数据将有所不同。我可以在应用程序中根据用户类型硬编码显示和隐藏这些元素,但是我们有一个权限矩阵来定义权限,因此我想创建一个ACL,以便我们可以轻松地将矩阵审核到应用程序代码。

我已经环顾四周,但System.Security命名空间中的很多ACL和安全代码似乎都是针对Windows和文件系统ACL制作的。

有人可以推荐任何现有的类(最好是免费的),在C#中实现简单的ACL。

我只需要能够做这样的事情:

ACL acl = new ACL(); 
acl.addRole("User"); 
acl.addRole("Manufacturer"); 

acl.addResource("SpecialButton"); 

acl.deny("SpecialButton"); 
acl.allow("SpecialButton", "Manufacturer"); 

// so later in my app I can do 

theUserType = "Manufacturer"; 
// ... 
if (acl.isAllowed(theUserType, "SpecialButton")) { 
    SpecialButton.Visible = true; 
} 

我不希望尝试在运行时使用代码篡改停止的人,如果他们想走出自己的路来那么他们可以做到这一点,但我想要一种简单的方法来创建和查询ACL,以确定GUI的外观以及在基于密钥加载程序时可用的选项。

很容易创建这个,但如果已经完成,那就更好了。

+1

我会避免术语ACL相对于这个,因为它是不同的(与System.Security东西重叠)。您正在考虑的是基于许可证的配置。 – Deleted

回答

1

真的没有太多的你在说什么。

您有角色和角色有属性。一个属性可能会出现在一个或多个角色中。够简单。

许可证密钥定义使用中的角色。从中可以加载属性列表(“OPENCONTACT”,“EDITCONTACT”,DELETECONTACT)或名称值对(100 = OPENCONTACT,101 = EDITCONTACT等),可以是单独的字符列表(012)你可以用AzMan来做这件事,它比你想要的要多一点。

角色/属性列表可以提供为需要在运行时加载加密的资源...

+0

这听起来像是一个适合的好方法。您是否发现通过代码在运行时设置规则时遇到的任何问题,而不是使用具有适用于每个组的适当用户权限的加密资源?我想出了一些你可以看到的基本代码[这里](http://pastebin.com/FJ5ZBudh)。你是否看到任何固有的缺陷或问题?谢谢! – drew010

+0

@ drew010:看起来很好。该代码相当易于维护且易于添加。另外,如果您想将关联存储在数据库或其他文件中,则转换看起来相当容易。 – NotMe

1

如果您要将应用程序部署到Windows 7或Windows Server 2003/2008,则可能需要考虑使用Windows附带的免费授权管理器功能。

有关Microsoft的完整概述,请参阅here

本质上,它允许您定义角色,每个角色可以执行的任务以及每个任务中允许的操作。

有一个API可供您从C#应用程序中查询授权存储,以便您可以查询哪些操作可用于特定角色。这将使您返回分配给该角色的操作号码的聚合列表。然后,您可以测试是否存在特定的操作(或者是否缺少)并相应地自定义您的UI。

HTH, Dean。

+0

我已经看到了,但最初看起来比我们需要的更多。另外,我们计划支持Windows XP客户端。我发现他们可以将XML文件用于角色,这是很好的,因为规则基本上会内置到应用程序中,而不是从中央源获取或验证。该应用程序独立运行在全球多个用户的个人电脑上,不依赖于活动的网络连接。 – drew010

+0

显然你可以让它在XP上运行[链接](http://consultingblogs.emc.com/stuartpreston/archive/2005/03/17/1147.aspx)。也不需要有活动的网络连接;它可以是独立的。 – DeanOC

相关问题