Tom*_*ana 8 .net c# asp.net permissions design-patterns
我们的(ASP.NET Web)应用程序中有一个相当复杂的权限处理系统.用户可以对不同类型的对象拥有特定权限,某些权限甚至可以打包到分配给用户的组/角色中.总而言之,这最终会出现一个非常复杂的混乱局面,用于确定用户是否可以执行/查看您必须评估许多不同权限来源的内容,这可以按需按照特定情况以某种方式完成.
我的问题是(从高层次的角度来看)是否有一些建议/通用设计模式来处理一般的权限概念,也可能是您在架构中处理它们的经验.
能够测试与组关联的原子权限的用户和组bool UserHasPermission( SOME_PERMISSION )是授权的标准方法,但是事情正在变为基于声明的:
http://msdn.microsoft.com/en-us/magazine/ee335707.aspx
http://msdn.microsoft.com/en-us/magazine/cc163366.aspx
http://www.infoq.com/news/2009/10/Guide-Claim-Based-Identity
然而,它并非适用于所有情况.
对于旧模型,我发现在权限检查期间使用memoization可以获得性能.这样我每次会话都不会去数据库n次来检查访问控制.Memoization有效地在缓存中存储具有相同参数的调用结果,因此特定用户检查XYZ权限的所有调用都将返回相同的结果.当然,您需要确保在Session中存储了用户的memoized权限,这样每个用户就可以了.如果您在登录时加载权限,则无需缓存它们,但在具有许多权限的大型系统中,有时最好仅在需要时获取它们.
http://www.infoq.com/news/2007/01/CSharp-memory