"MKJ" <m@ds.dk> skrev i en meddelelse
news:4795d557$0$2086$edfadb0f@dtext02.news.tele.dk...
> Hej
>
> Jeg har problemer med performance på en søgning.
> Systemet der søges i er et arkivsystem der består af X antal sager der
> hver kan indeholde X antal emner.
> Problemet er ikke selve søgningen men et check der skal laves for at finde
> ud af om brugeren har rettigheder til et emne.
>
> Der er 2 forskellige måder en bruger kan få rettigheder til et emne:
> 1) Der er ikke angivet en adgangsgruppe på selve emnet.
> 2) Der er angivet en eller flere adgangsgrupper på emnet som brugeren er
> medlem af.
>
> Pt. bruger jeg en sql funktion til at finde ud af om brugeren har de
> nødvendige rettigheder så nu ligner søgningen noget i retning af:
>
> "SELECT * FROM Documents WHERE Description LIKE '%søgeord%' AND
> DBO.func_CanGetItem(Documents.DocumentId, @UserId) = 1"
>
> Rettighederne er angivet i en simpel tabel der bla. indeholder ItemId,
> GroupId derudover er der en Users tabel en Groups tabel samt en
> GroupsUsers tabel.
> Der er ingen tvivl om at det er funktionskaldet der tager lang tid og det
> der skal fjernes jeg ved bare ikke hvordan man flytter det samme check til
> sin select.
>
> --
> MKJ
>
Hvis vi forestiller os 2 tabeller:
tblEmner
ID Emne
1 Emne 1
2 Emne 2
3 Emne 3
tblRettighed
ID EmneID SikkerhedsID
1 1 24
2 1 18
3 1 2
4 2 24
5 2 18
6 3 2
SikkerhedsID kan være både brugerid og gruppe id!
Du har en bruger der har sikkerhedsID'erne (2, 15, 97) og vil vide om han
har rettighed til EmneID 2
Nu må du ikke holde mig op på syntaxen (specielt på det med IN), men noget i
stil med....
SELECT DISTINCT e.Emne FROM tblEmne as e, tblRettighed as r WHERE e.ID = 2
AND e.ID = r.EmneID AND r.SikkerhedsID IN (2, 15, 97)
--
Mvh
Nygaard
www.nygaard.eu