salut a tous,
j'ai un soucis, je souhaite restreindre l'acces des donnees d'une table suivant l'utilisateur connecte. j'ai donc cree un champ user_name me permettant de filtrer mes donnees et une vue sur cette table
je veux pouvoir inserer dans la table, j'ai donc cree une regle qui me permet de rendre le systeme transparent :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 CREATE TABLE contact_table (contact_id integer, first_name character varying (50), user_name name default current_user); create view contact (contact_id, first_name) as select contact_id, first_name, user_name from contact_table where user_name = current_user
Ceci marche tres bien,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 CREATE RULE _insert_into_contact AS ON insert TO contact DO INSTEAD INSERT INTO contact_table VALUES ( NEW.contact_id, NEW.first_name);
ce syteme me permet de ne voir que les donnees inserees par l'utilisateur connecte et je peux inserer des donnees
sauf que le probleme arrive lorsque je remplace mon integer de contact_id par une sequence.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 insert into contact values (1, 'toto);
je ne peux alors pas faire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 CREATE TABLE contact_table (contact_id serial NOT NULL PRIMARY KEY, first_name character varying (50), user_name name default current_user);
et si je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 insert into contact (first_name) values ( 'titi'); ERROR: null value in column "contact_id" violates not-null constraint
ca marche bien entendu mais ceci n'utilise pas la sequence, et ensuite si j'essaie d'inserer dans la table :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 insert into contact values (1,'toto'); INSERT 96880021 1
comment je dois faire (si c'est possible) pour pouvoir inserer dans ma table a partir de ma vue (grace a la regle) sans avoir a me preoccuper de la valeur de la pk et laisser ce probleme etre gere par l'incrementation automatique ?(serial ou sequence, je ne sais pas quel terme employer)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 insert into contact_table (first_name) values ( 'titi'); ERROR: duplicate key violates unique constraint "contact_table_pkey"
Merci
Partager