Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 其他实体的多个用户权限_C#_Sql Server 2008_Asp.net Membership_Subsonic - Fatal编程技术网

C# 其他实体的多个用户权限

C# 其他实体的多个用户权限,c#,sql-server-2008,asp.net-membership,subsonic,C#,Sql Server 2008,Asp.net Membership,Subsonic,我们公司在从单用户应用程序迁移到多用户应用程序时遇到问题。我们的设置是,用户将拥有一个产品,而所有权是通过外键实现的。因为他们拥有产品,所以他们有权在产品上执行所有功能。如果您不拥有该产品且不是管理员,则无法访问该产品或其任何功能 现在,我们正试图将产品的访问权限开放给与各自所有者一起分组的其他用户,以进行协作。基于一组权限,这些其他用户(包括所有者)可能具有有限的功能。权限的范围设计为基于 产品所有权关系(FK) 通过Person_Product bridge表的人与产品关系 产品属于且仅属于

我们公司在从单用户应用程序迁移到多用户应用程序时遇到问题。我们的设置是,用户将拥有一个产品,而所有权是通过外键实现的。因为他们拥有产品,所以他们有权在产品上执行所有功能。如果您不拥有该产品且不是管理员,则无法访问该产品或其任何功能

现在,我们正试图将产品的访问权限开放给与各自所有者一起分组的其他用户,以进行协作。基于一组权限,这些其他用户(包括所有者)可能具有有限的功能。权限的范围设计为基于

  • 产品所有权关系(FK)
  • 通过Person_Product bridge表的人与产品关系
  • 产品属于且仅属于一个组的人-组-产品关系
  • 个人到组织(应用程序范围的权限),如果未声明通过其他关系的权限,则为用户的默认权限
  • 这些关系已经实现了,但是在系统基于关系进行大量计算的地方出现了问题。e、 g.获得用户对产品集合的权限会严重影响性能。此外,我们系统的灵活性也受到新关系和抽象的限制

    就数据库而言,我认为关系2是一个基本块,可以用来表示所有关系的行为,以及我们公司将来需要在上面分层的任何抽象

    我这样想对吗?还是我们现在走对了方向?任何有帮助的意见都将不胜感激


    相关技术被标记。

    对于这样的应用程序,严格规范化的关系数据库可能是一个瓶颈。我还没有看到解决方案,但是如果你考虑在标准化的数据库中禁止的表,你可以加快速度。p> 我的方法是使用一个包含实际数据的严格规范化DB部分和一个充当缓存的非规范化部分。。。这两个部分之间的更新是单向的:从标准化部分到缓存(如果cahce中存在不一致的数据/异常,可以重建缓存)

    优点是:每个用户的权限可以聚合(甚至可以作为二进制对象),并且可以作为每个用户/每个产品/等的单行获取,只要权限来自缓存。。。根据用例的不同,这可能非常快

    缺点是:对缓存数据的更新更复杂:您必须更新普通数据库,然后必须更新缓存,否则在重新绑定之前,缓存将看不到您的更新。。。如果您的权限不是每2秒更新一次,这不是什么大问题

    另外:您必须实现和维护缓存以及使用该缓存的应用程序


    因此,有一个警告:即使这可能(=不保证在所有情况下都是如此)非常快,只要还有其他选择,就不应该使用这种方法。(您应该尽可能避免破坏规范化;数据库是否正确索引?是否可以在其他地方设置这样的缓存,例如,某个地方的服务应用程序?

    这并不是真正需要关注的速度,更重要的是当前设置的规范化和灵活性。我们已经设计了DB的基础来反映更多抽象逻辑(范围3和4)。我现在一直在使用current实现,但下次当我被要求设计这样的系统时,我会记住这一点。谢谢你的回答。