Salut à tous,
Je cherche à faire une matrice des droits utilisateurs pour mon appli web (C#, .Net 4, Entity Framework Model First).
Je stocke les informations de droits dans deux tables :
et
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 [dbo].[UserFieldVisibilitySet]( [UFV_Id] [int] IDENTITY(1,1) NOT NULL, [UFV_FieldName] [nvarchar](max) NOT NULL, [UFV_UserLevelId] [int] NULL, [UFV_IsVisible] [bit] NULL, CONSTRAINT [PK_UserFieldVisibilitySet] PRIMARY KEY CLUSTERED ( [UFV_Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE [dbo].[UserFieldVisibilitySet] WITH CHECK ADD CONSTRAINT [FK_UserLevelUserFieldVisibility] FOREIGN KEY([UFV_UserLevelId]) REFERENCES [dbo].[UserLevelSet] ([UL_Id]) GO ALTER TABLE [dbo].[UserFieldVisibilitySet] CHECK CONSTRAINT [FK_UserLevelUserFieldVisibility] GO
J'ai réalisé la requête suivante qui me retourne mes données comme je le souhaite :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 CREATE TABLE [dbo].[UserLevelSet]( [UL_Id] [int] IDENTITY(1,1) NOT NULL, [UL_Name] [varchar](250) NOT NULL, [UL_MinimalPoint] [int] NOT NULL, CONSTRAINT [PK_UserLevelSet] PRIMARY KEY CLUSTERED ( [UL_Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY], UNIQUE NONCLUSTERED ( [UL_Name] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
Cette requête me retourne le résultat suivant (la première colonne étant composée de string et les autres de booléens) :
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
17
18
19
20 declare @LevelName varchar(max) declare @DynamicStr nvarchar(max) select distinct UFV_FieldName into #tempFields from UserFieldVisibilitySet select distinct UL_Id, UL_Name into #tempLevel from UserLevelSet order by UL_Id while ((select count(*) from #tempLevel) > 0) begin set @LevelName = (select top 1 UL_Name from #tempLevel) set @DynamicStr = 'alter table #tempFields add [' + @LevelName + '] bit' exec sp_executesql @DynamicStr set @DynamicStr = 'update #tempFields set [' + @LevelName + '] = ' + '(select UFV_IsVisible from UserFieldVisibilitySet where UFV_FieldName = #tempFields.UFV_FieldName and UFV_UserLevelId = (select top 1 UL_Id from #tempLevel))' exec sp_executesql @DynamicStr delete from #tempLevel where UL_Name = @LevelName end select * from #tempFields drop table #tempFields drop table #tempLevel
Jusque là, tout va bien, j'ai tout ce qu'il me faut.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 UFV_FieldName Penseur débutant Penseur occasionnel Penseur récurrent Penseur de grand chemin U_BirthDate 0 0 1 1 U_CountPoints 0 0 1 1 U_Description 0 1 1 1 U_Id 0 0 0 0 U_Image 0 0 0 1 U_IsActive 0 0 0 0 U_LastConnection 0 0 0 1 U_Mail 0 0 0 1 U_Password 0 0 0 0 U_RegisterDate 0 0 0 1 U_UserLevelId 1 1 1 1 U_UserName 1 1 1 1 U_UserRightId 0 0 0 0
Mon problème est pour ressortir tout ça au niveau de mon appli.
Je pensais utiliser un gridview avec ma proc stock comme source de données.
Le problème est qu'avec Entity (à moins que je n'ai loupé quelque chose), je dois indiquer le type de données qui m'est retourné.
Je me suis donc dit que je pourrais me contenter de transcrire cette requête en Linq mais là, je cale...
Comment alimenter mon gridview avec le résultat de cette requête ?
OU
Comment la transcrire en Linq ?
Merci de votre aide.
Max
Partager