我需要一个这样的系统 - 他们有销售,项目管理和服务管理。每个不同类型的员工应该能够看到来自其他员工的所有信息,但只能修改其工作的特定信息(例如,销售人员无法修改项目管理信息但可以查看它)。为了进一步扭转这种局面,它们有多个位置,只有那些位置才能访问特定于该位置的数据。
由于我最熟悉C#,我将使用它作为将它们组合在一起的语言。
关于如何做到这一点我有一些不同的想法,并且不知道什么是最好的解决方案来完成这一切。
我目前的想法是数据库......
CREATE TABLE Employee
(
Employee_ID INT, --PK
Employee_Role INT, --FK
Location_ID INT --FK
);
然后,代码中的每个查询都将特定于其Employee_Role和Location_ID。我假设我会手动创建每个用户(他们只有大约15名员工),为他们分配值,然后让后端代码将查询绑定在一起。
这方面的难点在于这些系统查询会变得非常讨厌(至少对我而言,我不是DBA而且从未做过这样的事情)。
所以,例如,如果我想要显示..让我说具体位置的Prospective_Clients表我会......这大致是我的想法
SELECT *
FROM Prospective_Clients
INNER JOIN Employee on Prospective_Clients.Location_ID = Employee.Location_ID;
或者那种效果..然后更新或插入数据,查询将在insert语句中包含Employee_Role必须等于我分配它的任何值。当然他们提出了问题......
每次员工插入客户信息时,他们也必须添加location_id吗?我想我可以只有一个下拉菜单,他们可以选择位置名称等于location_ID ...但是用户部分有错误的余地。或者我想我可以在查询中设置客户端Location_ID将等于员工Location_ID是什么。
我是否正确地这样做?这些都需要在后端代码中进行控制吗?或者数据库端有什么东西更容易做到这一点。我的意思是这个问题对任何人来说都是我的想法,或者我应该去找DBA聘请。
答案 0 :(得分:0)
Use a separate table for permission. also make permission based on role not each employee. that's more conformable for end user and developer.
CREATE TABLE Role_Permission
(
RoleID int, -- fk
LocationID int, -- fk
CanAdd bit,
CanRead bit,
CanUpdate bit ,
CanDelete bit ,
Active bit
)