[php] slim queryén

Pagina: 1
Acties:

  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 01-09 18:16
Hoi,

ik heb een probleempje met rechtenstructuuren, en vroeg me ook af natuurlijk, of mijn structuur goed is, om te controleren of een gebruiker wel ergens mag zijn op een forum gedeelte of niet.

Elk forum heeft een row met "prive", als het op 0 staat > iedereen toegang, als het op 1 staat, ga je rechten controleren, dat heb ik in een aparte tabel staan, wat er als volgt uit ziet:

code:
1
2
3
4
5
+----------------------------------------+
|                    rechten             |
+-----------+---------------+------------+
| userID    | forumID       | rechtID    |
+-----------+---------------+------------+


Dan krijg je een query zoals dit:

PHP:
1
2
$query = mysql_query ("SELECT userID, forumID, rechtID FROM rechten 
WHERE userID = gebruikers.gebruikersID AND forumID = $query_nogwat->forum_id");


Alleen, je werkt met categoriën (in mijn geval noem ik die groepen), en de daarbij behorende forums. Dat doe ik met behulp van 2 whiles, met een template set.

PHP:
1
2
3
4
5
6
7
8
9
// pseudo code
while (groep)
{
     // template set groep

     while (forum) {
          // template set forum
     }
}


Maar het is dan best moeilijk om met de gewenste query's het gewenste resultaat te krijgen, zodat je geen lege categoriën krijgt, of forums zonder categorie.

Met joins kom je al een beetje in de goede richting. Maar dan moet je weer zeg maar query -> iets -> query gaan werken (2 dezelfde query's op 1 ding na zeg maar).

Dus ik vroeg mij een beetje af of het een beetje goede manier is, en misschien een klein beetje stuuring de goede richting in kwa rechten en het slim afhandelen van het weergeven van forums / categorien op de index.

(na 3 dagen heel hard coden, zo'n 600 lijntjes code etc ben je best wel brak ja)

  • whoami
  • Registratie: December 2000
  • Nu online
Is dat mbhv een MySQL databank?
Hoe ziet jouw tabel 'categoriën' en 'forums' eruit?

https://fgheysels.github.io/


  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 31-03 16:47

CyberSnooP

^^^^ schrijft --->

best wel brak.. tis dat je het zelf zegt ;)

Maar misschien dat ik je kan helpen d.m.v. het volgende ideetje:
Met een query als:
code:
1
2
3
4
SELECT f.forumId, f.forumNaam, f.groepId, r.rechtId 
FROM forum AS f LEFT JOIN rechten AS r ON f.forumId = r.forumId
WHERE r.userId = '123'
ORDER BY f.groepId

verkijg je al je forum namen in een keer, gesorteerd per categorie. (vervang 123 door het echte gebruikers id natuurlijk)

Een stukje code-outline:
- Zet laatsteGroepId op NULL bijv.
- Voor elke rij in bovenstaande query:
-- Mag de gebruiker dit forum zien? (r.rechtId checken)
--- Is f.groepId ongelijk aan laatsteGroepId?
---- Geef een groep-kopje weer in je template.
---- laatsteGroepId = f.groepId
--- Geef de forum naam weer in je template
--
-

Ik moet alleen eerlijk bekennen dat ik betwijfel of dit een antwoord is op je vraag, ik niet helemaal begrijp wat rechtId (<-- ID?) inhoud en wat je met je stukje pseudo-code nu wilt aangeven.

Verder is
• sorteren op Id een slecht idee, omdat de absolute waarde van een Id wat mij betreft niet geïnterpreteerd mag worden (je kunt beter een soort 'position' veld maken in je categorie tabel, maar das van latere zorg).
• de genoemde query maar een modelletje :)

|_____vakje______|


  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 01-09 18:16
ff dump gemaakt:

code:
1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE forums (
  forum_id int(11) NOT NULL auto_increment,
  forum_groepid int(11) NOT NULL default '0',
  forum_titel varchar(55) NOT NULL default '',
  forum_beschrijving varchar(255) NOT NULL default '',
  forum_topics int(11) NOT NULL default '0',
  forum_replys int(11) NOT NULL default '0',
  forum_lastpost varchar(99) NOT NULL default '',
  forum_prive int(11) NOT NULL default '0',
  PRIMARY KEY  (forum_id)
) TYPE=MyISAM;


code:
1
2
3
4
5
CREATE TABLE groepen (
  groep_id int(11) NOT NULL auto_increment,
  groep_titel varchar(55) NOT NULL default '',
  PRIMARY KEY  (groep_id)
) TYPE=MyISAM;


spreekt voor zich.

Rechten zitten zo:
UserID, ForumID, RechtID.
UserID = het ID van de user
ForumID = het desbetreffende Forum voor rechten
RechtID = Welke rechten je hebt

1 = schrijven
2 = lezen
3 = veranderen

Moderators + Administrators in 2 aparte tabellen heb ik nu.

Dump rechten:
code:
1
2
3
4
5
6
CREATE TABLE rechten (
  rechten_userid int(11) NOT NULL default '0',
  rechten_forumid int(11) NOT NULL default '0',
  rechten_rechtid int(11) NOT NULL default '0',
  PRIMARY KEY  (rechten_userid,rechten_forumid,rechten_rechtid)
) TYPE=MyISAM;


Misschien nu duidelijker. Ik vraag nu niet om hele code's e.d. , wil gewoon weten wat het beste is kwa rechtensysteem, en hoe men dan verwacht hoe je het gaat impleteren.

Vooral gaat het ook om beveiliging e.d.

bedoeling is om categoriën (groepen in mijn geval), te koppellen aan forums, met behulp van een while in een while.
PHP:
1
2
3
4
5
while (categorie/groep wat jij wilt)
{
     while (forum) {
     }
}