C# 其他实体的多个用户权限
我们公司在从单用户应用程序迁移到多用户应用程序时遇到问题。我们的设置是,用户将拥有一个产品,而所有权是通过外键实现的。因为他们拥有产品,所以他们有权在产品上执行所有功能。如果您不拥有该产品且不是管理员,则无法访问该产品或其任何功能 现在,我们正试图将产品的访问权限开放给与各自所有者一起分组的其他用户,以进行协作。基于一组权限,这些其他用户(包括所有者)可能具有有限的功能。权限的范围设计为基于C# 其他实体的多个用户权限,c#,sql-server-2008,asp.net-membership,subsonic,C#,Sql Server 2008,Asp.net Membership,Subsonic,我们公司在从单用户应用程序迁移到多用户应用程序时遇到问题。我们的设置是,用户将拥有一个产品,而所有权是通过外键实现的。因为他们拥有产品,所以他们有权在产品上执行所有功能。如果您不拥有该产品且不是管理员,则无法访问该产品或其任何功能 现在,我们正试图将产品的访问权限开放给与各自所有者一起分组的其他用户,以进行协作。基于一组权限,这些其他用户(包括所有者)可能具有有限的功能。权限的范围设计为基于 产品所有权关系(FK) 通过Person_Product bridge表的人与产品关系 产品属于且仅属于
相关技术被标记。对于这样的应用程序,严格规范化的关系数据库可能是一个瓶颈。我还没有看到解决方案,但是如果你考虑在标准化的数据库中禁止的表,你可以加快速度。p> 我的方法是使用一个包含实际数据的严格规范化DB部分和一个充当缓存的非规范化部分。。。这两个部分之间的更新是单向的:从标准化部分到缓存(如果cahce中存在不一致的数据/异常,可以重建缓存) 优点是:每个用户的权限可以聚合(甚至可以作为二进制对象),并且可以作为每个用户/每个产品/等的单行获取,只要权限来自缓存。。。根据用例的不同,这可能非常快 缺点是:对缓存数据的更新更复杂:您必须更新普通数据库,然后必须更新缓存,否则在重新绑定之前,缓存将看不到您的更新。。。如果您的权限不是每2秒更新一次,这不是什么大问题 另外:您必须实现和维护缓存以及使用该缓存的应用程序
因此,有一个警告:即使这可能(=不保证在所有情况下都是如此)非常快,只要还有其他选择,就不应该使用这种方法。(您应该尽可能避免破坏规范化;数据库是否正确索引?是否可以在其他地方设置这样的缓存,例如,某个地方的服务应用程序?这并不是真正需要关注的速度,更重要的是当前设置的规范化和灵活性。我们已经设计了DB的基础来反映更多抽象逻辑(范围3和4)。我现在一直在使用current实现,但下次当我被要求设计这样的系统时,我会记住这一点。谢谢你的回答。