2015-05-04 1 views
0

Мне нужна система как таковая - у них есть продажа, управление проектами и управление услугами. Каждый сотрудник различного типа должен иметь возможность видеть всю информацию от других сотрудников, но только иметь возможность изменять конкретную информацию для своей работы (например, продажа не может изменить информацию об управлении проектом, но может просмотреть ее). Чтобы перевернуть это немного, у них есть несколько местоположений, и только те местоположения могут получить доступ к данным, специфичным для этого местоположения.База данных, отображающая/позволяющая различным пользователям определенную информацию на основании их роли или ID

Поскольку я больше всего разбираюсь в C#, я буду использовать это как язык, чтобы связать все это вместе.

У меня есть несколько разных идей о том, как это сделать, и понятия не имею, что было бы лучшим решением для этого.

Моя текущая идея для базы данных ...

CREATE TABLE Employee 
(
    Employee_ID INT, --PK 
    Employee_Role INT, --FK 
    Location_ID INT --FK 
); 

Затем, каждый запрос в коде будет специфичны для их Employee_Role и LOCATION_ID. Я предполагаю, что я вручную создаю каждого пользователя (у них будет только около 15 сотрудников), присвойте им значения, а затем внутренний код свяжет запросы вместе.

Сложность заключается в том, что эти системные запросы будут довольно неприятными (по крайней мере для меня, я не администратор базы данных и никогда не делал ничего подобного).

Так, например, если бы я хотел показать .. позволяет сказать Prospective_Clients таблицу для конкретного места, я бы ... и это примерно моя идея

SELECT * 
FROM Prospective_Clients 
    INNER JOIN Employee on Prospective_Clients.Location_ID = Employee.Location_ID; 

Или что-то на этот счет .. А потом для обновления или вставки данных запрос будет содержать в операторах вставки, что Employee_Role должен равняться любому значению, которое я ему назначил. Конечно, они задают вопросы ...

  1. Будет ли каждый раз, когда сотрудник вставляет информацию о клиенте, он должен также добавить location_id? Я предполагаю, что у меня может просто выпасть, что они могут выбрать, что имя места будет равно идентификатору location_ID ... но тогда есть место для ошибок в частях пользователей. Или, я полагаю, я мог бы настроить его в запросе, что клиенты Location_ID будут равны всем сотрудникам Location_ID.

  2. Я собираюсь сделать правильный путь? Нужно ли все это контролировать во внутреннем коде? Или есть что-то в конце базы данных, что легче сделать это. То, что я имею в виду под этим вопросом, - это то, что каждый может понять, как я думаю, или мне просто нужно найти администратора базы данных.

ответ

0

Используйте отдельную таблицу для получения разрешения. также сделать разрешение на основании роли не каждого сотрудника. это более приемлемо для конечного пользователя и разработчика.

CREATE TABLE Role_Permission 
(
    RoleID int, -- fk  
    LocationID int, -- fk  
    CanAdd bit,  
    CanRead bit,  
    CanUpdate bit , 
    CanDelete bit , 
    Active bit 
) 
Смежные вопросы