2011-06-23 4 views
0

Je construis un petit projet avec une base de données. J'ai une table d'utilisateur qui a deux colonnes, user_id et name, La deuxième table stocke l'ID et le nom de certains documents: il a également deux colonnes doc_id et doc_name. Je souhaite accorder l'accès d'un utilisateur spécifique à des documents (multiples) spécifiques.Accorder l'accès d'un utilisateur spécifique à des documents (multiples) spécifiques

Par exemple:

user1 peuvent accéder doc_2 et doc_3 seulement.

user2 peut accéder doc_1 et doc_2 Seulement et ainsi de suite. Les utilisateurs et les formulaires ne cessent de changer (par exemple, après un certain temps, j'ai besoin d'ajouter un nouveau document et d'ajouter l'accès à un nouvel utilisateur à ce nouveau document).

Dois-je changer la conception de la base de données? (par exemple ajouter une colonne dans docs pour stocker le nom de chaque utilisateur qui peut y accéder?) Si c'est le cas, pouvez-vous me dire quels changements je devrais faire?

OU

Est-il possible de le faire en créant des points de vue? Dans ce cas, dois-je encore changer la conception de la base de données? Si tel est le cas, pouvez-vous me donner un exemple de vue s'il vous plaît? Dans ce cas, aurai-je besoin de créer une vue pour chaque utilisateur? Par exemple, s'il y a 100 utilisateurs, je devrai créer 100 vues?

Répondre

1

Vous avez besoin d'une troisième table (je l'appellerai user_doc). Vous avez besoin de 2 colonnes principales; user_id et doc_id.

Vous insérez ensuite une ligne pour chaque document et combinaison utilisateur ayant des autorisations d'accès.

Si leur user_id n'apparaît pas dans la table user_doc avec le doc_id, ils n'ont pas l'autorisation.

Une requête de l'échantillon pour obtenir une liste de tous les documents d'un utilisateur spécifique a accès à:

SELECT doc_id FROM user_doc WHERE user_id = @UserId 

ou pour trouver tous les utilisateurs ayant accès à un document spécifique:

SELECT user_id FROM user_doc WHERE doc_id = @DocId 
+0

merci. est-ce possible avec des vues? – sunjie

+0

Vous pouvez utiliser une vue pour représenter les utilisateurs et leurs autorisations, mais vous devez toujours créer cette troisième table et la remplir en conséquence. Les vues ne peuvent être utiles que si elles ont des données non représentées à représenter. – Widor

0

Vous devez avoir une table PERMISSIONS avec la relation entre les utilisateurs & Documents. Les colonnes peuvent être PERMISSIONS_ID, USER_ID (référer l'utilisateur), DOC_ID (référer le document). Chaque fois qu'un utilisateur doit accéder à un document, cette table doit être remplie.

Questions connexes