数据库根据用户的角色或ID显示/允许不同用户的某些信息

时间:2015-05-04 16:57:25

标签: c# sql sql-server database

我需要一个这样的系统 - 他们有销售,项目管理和服务管理。每个不同类型的员工应该能够看到来自其他员工的所有信息,但只能修改其工作的特定信息(例如,销售人员无法修改项目管理信息但可以查看它)。为了进一步扭转这种局面,它们有多个位置,只有那些位置才能访问特定于该位置的数据。

由于我最熟悉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必须等于我分配它的任何值。当然他们提出了问题......

  1. 每次员工插入客户信息时,他们也必须添加location_id吗?我想我可以只有一个下拉菜单,他们可以选择位置名称等于location_ID ...但是用户部分有错误的余地。或者我想我可以在查询中设置客户端Location_ID将等于员工Location_ID是什么。

  2. 我是否正确地这样做?这些都需要在后端代码中进行控制吗?或者数据库端有什么东西更容易做到这一点。我的意思是这个问题对任何人来说都是我的想法,或者我应该去找DBA聘请。

1 个答案:

答案 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
)