C# 根据不同用户的角色或ID显示/允许不同用户使用特定信息的数据库

C# 根据不同用户的角色或ID显示/允许不同用户使用特定信息的数据库,c#,sql,sql-server,database,C#,Sql,Sql Server,Database,我需要一个这样的系统-他们有销售,项目管理和服务管理。每种不同类型的员工都应该能够查看其他员工的所有信息,但只能修改其工作的特定信息(例如,销售人员不能修改项目管理信息,但可以查看)。更进一步说,它们有多个位置,只有这些位置才能访问特定于该位置的数据 因为我最精通C#语言,所以我会用它来将所有内容联系在一起 我对如何做到这一点有一些不同的想法,不知道什么是最好的解决方案来完成这一切 我现在的想法是数据库 CREATE TABLE Employee ( Employee_ID INT, --P

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

因为我最精通C#语言,所以我会用它来将所有内容联系在一起

我对如何做到这一点有一些不同的想法,不知道什么是最好的解决方案来完成这一切

我现在的想法是数据库

CREATE TABLE Employee
(
  Employee_ID INT, --PK
  Employee_Role INT, --FK
  Location_ID INT --FK
);
然后,代码中的每个查询将特定于其员工角色和位置ID。我假设我将手动创建每个用户(他们只有大约15名员工),为他们分配值,然后让后端代码将查询绑定在一起

这样做的困难在于这些系统查询将变得非常糟糕(至少对我来说,我不是DBA,也从未做过类似的事情)

举个例子,如果我想展示。。比如说,我会为某个特定地点的潜在客户提供一张表……这大概是我的想法

SELECT *
FROM Prospective_Clients
    INNER JOIN Employee on Prospective_Clients.Location_ID = Employee.Location_ID;
或者类似的东西。。然后要更新或插入数据,查询将在insert语句中包含Employee_角色必须等于我分配给它的任何值。当然,他们提出了问题

  • 员工每次插入客户信息时是否也必须添加位置id?我想我可以有一个下拉列表,他们可以选择位置名称将等于位置ID。。。但是,用户部分也有出错的余地。或者我想我可以在查询中设置它,客户的Location_ID将等于雇员的Location_ID

  • 我要用正确的方法来做这件事吗?这一切都需要在后端代码中控制吗?或者数据库端是否有更容易做到这一点的东西。我这个问题的意思是,我的想法对任何人都有意义,或者我应该去找一个DBA来雇佣


  • 使用单独的表来获得权限。还可以根据角色而不是每个员工授予权限。这对最终用户和开发人员来说更合适

    CREATE TABLE Role_Permission
    (
      RoleID  int, -- fk    
      LocationID  int, -- fk    
      CanAdd  bit,    
      CanRead  bit,    
      CanUpdate  bit ,   
      CanDelete  bit   , 
      Active  bit
    )