【问题标题】:Data protected in getting data获取数据时受保护的数据
【发布时间】:2017-11-25 09:42:00
【问题描述】:
我的问题是关于保护数据并为以下目的创建智能架构。
我有一个从数据库获取数据的 LibraryBS 类(有很多这样的类型类)。 LibraryBS 类具有 GETALL() 和 GetById(int libraryId) 函数。 GETALL 获取所有库,GetById 仅从数据库中获取一个库,即 Id=libraryId。这是一个使用这些类的 Web 应用程序。
现在我想添加公司保护。这意味着当用户登录系统并使用LibraryBs.GetAll()时,用户只能看到属于用户公司的数据。
还有一些特定的用户(我们称之为超级用户),这类用户进入系统后可以看到所有数据。
你推荐什么类型的模式?
谢谢!
【问题讨论】:
标签:
c#
oop
design-patterns
n-tier-architecture
【解决方案1】:
您需要一个用户表来存储用户,该表具有对存储公司详细信息的公司表的引用键或外键,以及一个访问级别表,该表存储用户访问级别以及对使用和公司的外键引用,以及一个表示每个公司每个用户的访问级别。您还需要在您的库表中包含一个返回给公司的参考。
有了这个,您需要让 LibraryBS.GetAll 方法将用户对象作为参数。
有了这个,你的 GetAll 方法可以根据传入的用户计算出正确的库。
希望这会有所帮助。
【解决方案2】:
考虑到Library的表,它应该包含列companyId和另一个以companyId作为外键的表User。
也许您可以在用户表中添加一个“访问”列。
将有“访问”列的数据查找表
Id AccessLevel
0 Undefined
1 User
2 Company
User Table
Id Name Access CompanyId
1 Bob 1 1
1 Jon 2 2
因此,当您获取用户 Bob 的数据时,您可以根据该用户的 Access 动态创建 where 子句。