Hallo luitjes 
Ik ga maar eens verder met m'n 'leerprojectje'. Nu gaat het puur om een zo efficient mogelijke query. Een query die EN 2 tables fetcht (de categorieén en de fora) EN controleert of de rechten wel helemaal ok zijn. De rechtentabellen zijn onderverdeeld in roles, usergroups, linkedrights.
De tables:
in de tabel linkedrights worden dus alle gegevens in 1 tabel gezet.
dus GroupID heeft in ForumID dat roleID (rechtenset)... Die role moet gecontroleerd worden op die canView, als dat op 1 staat, dan mag hij het forum laten zien op de forumindex, anders niet.
Maar, er hoeven natuurlijk niet altijd rechten gecontroleerd te worden, want een forum kan ook "openbaar" zijn. Als forumIsPrivate = 0 dan is het openbaar, als het 1 is, dan is het een "prive" forum en dan moeten er rechten gecontroleerd worden....
Ik heb een groupID 1, de standaard, met 0 role entry's (dus geen rechtensets) en 0 linkedrights entrys (dus ook in geen 1 forum rechten).
In een cookie word er een userID en een sessionID opgeslagen. Nu denk ik dat het het makkelijkst is om met 2 query's te werken, één als iemand is ingelogt, één als iemand _NIET_ is ingelogt. Dan houd je voor de server in princiepe nog gewoon 1 query over. Dat word dus een totaal van twéé querys (1tje om te controleren of de cookies inderdaad valid zijn en dan 1tje om alle rechten+forums te fetchen)
Okeej, nu dan de query die ik tot nu toe heb:
($group heb ik de waarde "1" meegegeven)
Hééft iemand nog tips voor de query? Nu geeft hij 0,0 output (de query). Zijn er nog dingen die ik " in mind " moet houden? Toch vreemd van die 0,0 output, dat MOET in de joins zitten want in de where clausule word al gezegt forums.forumIsPrivate=0 dan moet hij die al als output geven...
Hoop dat de specialisten kunnen kijken naar de query en mij kunnen helpen om te optimaliseren
Het probleem ! 
Er _MOET_ een linkedright entry zijn, voor die usergroup, anders laat hij hem niet zien... Hij snapt niet echt dat het _ALLEEN_ voor forums zijn die een isPrivate flag hebben die op 1 staat.
Het lijkt erop dat de string $group elke waarde kan zijn maar dat de results hetzelfde blijven. Hij laat alleen het forum zien die ik ff snel in linkedrights heb gezet met een roleid waaar alle rechten op 1 staan...
De hamvraag: 
Is dit een goede manier van een rechtenstructuren bouwen, zonee, betere ideën? Zoja, hoop ik dat iemand me kan helpen met optimaliseren en de query daadwerkelijk werkend krijgen
Ik ga maar eens verder met m'n 'leerprojectje'. Nu gaat het puur om een zo efficient mogelijke query. Een query die EN 2 tables fetcht (de categorieén en de fora) EN controleert of de rechten wel helemaal ok zijn. De rechtentabellen zijn onderverdeeld in roles, usergroups, linkedrights.
De tables:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| CREATE TABLE `usergroups` ( `groupID` int(11) NOT NULL auto_increment, `groupName` varchar(50) default NULL, `groupColor` varchar(8) default NULL, `groupLinkedRightID` int(2) default NULL, PRIMARY KEY (`groupID`) ) TYPE=MyISAM AUTO_INCREMENT=3 ; CREATE TABLE `role` ( `roleID` int(11) NOT NULL auto_increment, `roleCanView` int(1) default NULL, `roleCanEdit` int(1) default NULL, `roleCanModify` int(1) default NULL, `roleCanViewTopicAdmin` int(1) default NULL, `rolecanModifyUsers` int(1) default NULL, `roleCanModifyUserNotes` int(1) default NULL, `roleCanAddUserNotes` int(1) default NULL, PRIMARY KEY (`roleID`) ) TYPE=MyISAM AUTO_INCREMENT=1 ; CREATE TABLE `linkedrights` ( `linkedID` int(11) NOT NULL auto_increment, `linkedGroupID` int(11) default NULL, `linkedForumID` int(2) default NULL, `linkedRoleID` int(2) default NULL, PRIMARY KEY (`linkedID`) ) TYPE=MyISAM AUTO_INCREMENT=1 ; |
in de tabel linkedrights worden dus alle gegevens in 1 tabel gezet.
dus GroupID heeft in ForumID dat roleID (rechtenset)... Die role moet gecontroleerd worden op die canView, als dat op 1 staat, dan mag hij het forum laten zien op de forumindex, anders niet.
Maar, er hoeven natuurlijk niet altijd rechten gecontroleerd te worden, want een forum kan ook "openbaar" zijn. Als forumIsPrivate = 0 dan is het openbaar, als het 1 is, dan is het een "prive" forum en dan moeten er rechten gecontroleerd worden....
Ik heb een groupID 1, de standaard, met 0 role entry's (dus geen rechtensets) en 0 linkedrights entrys (dus ook in geen 1 forum rechten).
In een cookie word er een userID en een sessionID opgeslagen. Nu denk ik dat het het makkelijkst is om met 2 query's te werken, één als iemand is ingelogt, één als iemand _NIET_ is ingelogt. Dan houd je voor de server in princiepe nog gewoon 1 query over. Dat word dus een totaal van twéé querys (1tje om te controleren of de cookies inderdaad valid zijn en dan 1tje om alle rechten+forums te fetchen)
Okeej, nu dan de query die ik tot nu toe heb:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| $mainQuery = " SELECT categorys.catID AS cat_id, categorys.catName AS cat_name, forums.forumID AS forum_id, forums.forumName AS forum_name, forums.forumDesc AS forum_desc FROM forums INNER JOIN categorys ON categorys.catID = forums.forumCatID INNER JOIN linkedrights ON linkedrights.linkedForumID = forums.forumID INNER JOIN role ON role.roleID = linkedrights.linkedRoleID WHERE (forums.forumIsPrivate = 0) OR (forums.forumIsPrivate = 1 AND role.roleCanView = 1 AND linkedrights.linkedGroupID = " .$group ." ) ORDER BY categorys.catOrder, forums.forumOrder "; |
($group heb ik de waarde "1" meegegeven)
Hééft iemand nog tips voor de query? Nu geeft hij 0,0 output (de query). Zijn er nog dingen die ik " in mind " moet houden? Toch vreemd van die 0,0 output, dat MOET in de joins zitten want in de where clausule word al gezegt forums.forumIsPrivate=0 dan moet hij die al als output geven...
Hoop dat de specialisten kunnen kijken naar de query en mij kunnen helpen om te optimaliseren
Er _MOET_ een linkedright entry zijn, voor die usergroup, anders laat hij hem niet zien... Hij snapt niet echt dat het _ALLEEN_ voor forums zijn die een isPrivate flag hebben die op 1 staat.
Het lijkt erop dat de string $group elke waarde kan zijn maar dat de results hetzelfde blijven. Hij laat alleen het forum zien die ik ff snel in linkedrights heb gezet met een roleid waaar alle rechten op 1 staan...
Is dit een goede manier van een rechtenstructuren bouwen, zonee, betere ideën? Zoja, hoop ik dat iemand me kan helpen met optimaliseren en de query daadwerkelijk werkend krijgen
[ Voor 47% gewijzigd door RedHat op 31-03-2005 22:21 ]