[PHP] gegevens bij elkaar halen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Stefan|IA2
  • Registratie: Mei 2008
  • Laatst online: 29-06-2021
Hallo Tweakers,

Ik ben nu al bijna een uur dingen aan het proberen (op papier) alleen ik kan er zelf niet uitkomen hoe ik het volgende probleem zou moeten oplossen.

Ik wil graag in de database achter iedere forumcategorie de permissies zetten van de gebruikersrangen die iets mogen uitvoeren.

Bijvoorbeeld in de kolom categorie_uitlezen staat: 1,1,0,1,0,1

In de tabel ranken staan de volgende rangen:
beheerder
moderator (globaal)
moderator (forum)
blogger
gebruiker
gast

Nu wil ik in de PHP code laten zien dat
beheerder = 1
moderator (globaal) = 1
moderator (forum) = 0
blogger = 1
gebruiker = 0
gast = 1

Hoe kan ik dit voor elkaar krijgen of bestaat er een betere en makkelijkere manier om permissies te geven aan ranken/groepen aan een forum categorie?

Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • mr_derk
  • Registratie: September 2005
  • Laatst online: 14:14
Stefan Keijzer schreef op vrijdag 03 oktober 2008 @ 18:58:

Bijvoorbeeld in de kolom categorie_uitlezen staat: 1,1,0,1,0,1
ik zou kiezen voor een koppeltabel, zoek ff op google: normaliseren

Acties:
  • 0 Henk 'm!

  • Stefan|IA2
  • Registratie: Mei 2008
  • Laatst online: 29-06-2021
Zoiets wilde ik eerst ook doen maar daar kwam ik echt helemaal niet uit.

Ik had de tabel

gebruikers
ranken
forum_categorie
forum_permissies
forum_auth

De gebruikers linken door naar de ranken die aangeven welke rank welke gebruiker heeft.
In forum_categorie staan alle categorien met daarachter een permissie uit forum_auth
forum_permissies zegt bijvoorbeeld op rij forum_uitlezen, forum_bewerken, forum_verwijderen, forum_toevoegen
in forum_auth ga ik alles samenvoegen, dus categorie1 heeft forum permissie 1 (alles) (gehaald uit forum_permissies) en daarvoor heb je rank id 1 nodig.

Alleen vanwege de hoeveelheid snapte ik het zelf niet meer, dus toen ben ik gaan kijken naar een makkelijkere manier.

Als jij mij kan uitleggen hoe ik het wel zou kunnen doen, zou ik het erg op prijs stellen!

[ Voor 8% gewijzigd door Stefan|IA2 op 03-10-2008 19:09 ]


Acties:
  • 0 Henk 'm!

  • mr_derk
  • Registratie: September 2005
  • Laatst online: 14:14
- tabel ranken, de ranken met bijbehorende permissies
- koppeltabel waarbij je gebruiker rank en forumcategorie combineert

een gebruiker kan meerdere keren terug komen in de koppeltabel omdat ie permissies kan hebben voor meerdere categorieën. Op deze manier kan een gebruiker ook meerdere ranks hebben. Als dit niet wenselijk is moet je dit uiteraard weglaten

[ Voor 19% gewijzigd door mr_derk op 03-10-2008 19:22 ]


Acties:
  • 0 Henk 'm!

  • Wmm
  • Registratie: Maart 2002
  • Laatst online: 19-09 09:58

Wmm

Je wilt dus rechten toekennen aan verschillende soorten gebruikers? In dat geval moet je misschien hier eens naar kijken: http://wiki.phpfreakz.nl/...eaus_binnen_webapplicatie.

Dat werkt anders dan jouw huidige manier, maar als je het eenmaal door hebt werkt het een stuk handiger denk ik.

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Denk er alleen aan dat voor kleine applicaties dat handig kan zijn, maar als je een beetje veel rechten wilt gebruiken loop je tegen een limiet aan ;)

Edit: wat ik wil zeggen... je kunt dit voorbeeld zeker gebruiken maar heel flexibel is het niet. Heb zelf een systeem gemaakt waarbij je gebruikers in meerdere groepen kunt plaatsen waarbij elke groep een eigen set rechten heeft. Je kunt per groep aangeven hoe je om moet gaan met conflicterende rechten (groep A zegt dat je iets wel mag maar in groep B mag je dit niet). Daarbovenop kun je per losse user nog weer specifieke rechten toewijzen of intrekken die hij in de groepen wel (of niet natuurlijk) heeft gekregen.

[ Voor 63% gewijzigd door Cartman! op 04-10-2008 09:54 ]


Acties:
  • 0 Henk 'm!

  • Wmm
  • Registratie: Maart 2002
  • Laatst online: 19-09 09:58

Wmm

Hm, daar heb ik geen ervaring mee met dat systeem maar het klinkt idd vrij lastig om te doen. Goed om te weten dan :).

Acties:
  • 0 Henk 'm!

  • CrashOverDrive
  • Registratie: Augustus 2005
  • Laatst online: 18:15
Wmm schreef op zaterdag 04 oktober 2008 @ 12:17:
Hm, daar heb ik geen ervaring mee met dat systeem maar het klinkt idd vrij lastig om te doen. Goed om te weten dan :).
Ik doe het meestal als volgt:
Tabel met hashes + descriptions, Deze hashes zijn uniek en staan in een variable bovenin `ieder` deel van de site.
Dus bijv bij het deel om Users te adden, users editten heeft weer een andere hash, niews bewerken weer een andere hash, etc.

vervolgens controleert me login script constant of hij nog geautoriseerd is. (op basis van een hash in een session),
deze hash wordt opgeslagen in een DB, met het ip-address + user_id + browser resolutie en nog wat meuk.
Wanneer de sessie valid wordt gevonden, Word er een array ingeladen met relevante string voor die pagina,waartoe hij toegang heeft. vervolgend is met een simpele isset te controleren of hij de content mag zien, door te kijken of de hash aanwezig is in die array.

De hashes van de sections, koppel ik aan de user doormiddel van een koppeltabel.
userId | sectionId

En nog een extra tabel met daarin voorafgestelde groepen (mod / admin / etc), deze groep bevat een template van de sectionId's, en worden direct aan de gebruiker gekoppeld via die koppeltabel, waardoor je ook `custom` rechten kan uitdelen aan een gebruiker. :P

Op deze manier kan je later redelijk simpel modules toevoegen.
Kwestie van hashes weer erin verwerken + deze opslaan in de DB.
En daarna deze koppelen aan de users / groep.

hopelijk heb je er wat aan. :)

[ Voor 7% gewijzigd door CrashOverDrive op 04-10-2008 12:56 ]


Acties:
  • 0 Henk 'm!

  • Stefan|IA2
  • Registratie: Mei 2008
  • Laatst online: 29-06-2021
Ik heb nu het volgende datamodel

categorien
- categorie_id
- categorie_naam

rollen:
- id
- naam

rol_permissie:
- id_rol (foreign key op id in tabel rollen)
- id_permissie (foreign key op id in tabel permissies)
- categorie_id (foreign key op id in tabel categorien)

permissies
- id
- lezen
- schrijven
- bewerken
- verwijderen

users:
- user_id
- id_rol (foreign key op id in tabel rollen)
- user_naam

Alleen nu wil ik een scriptje maken dat als je een categorie toevoegd je hierbij per rol de permissies kan toewijzen.
De categorie toevoegen dat wil wel lukken. En hierna doorsturen naar de permissie instel pagina wil ook nog wel lukken alleen het aangeven in de INSERT INTO query welke permissie bij welke rol en categorie hoort.

mysqli_query($mysqli, "
INSERT INTO rol_permissie
(permission_id, role_id, categorie_id)
VALUES ('', '', '" .$_GET['categorie']. "')
") or die(mysqli_error());

Het aantal permissies zijn (rijen in de tabel permissies)
1. lezen
2. lezen, toevoegen
3. lezen, toevoegen, bewerken
4. lezen, toevoegen, bewerken, verwijderen,
5. ...niets....

Al deze permissies worden per rol in een <select> gezet.

In mijn formulier staan nu alle rollen onder elkaar, met daarna de optie om de permissies in te stellen. Hoe kan zorgen dat als het gepost word voor iedere rol de permissie word gegeven aan de rol?

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Je weet toch wel hoe je arrays moet terugposten? Je maakt een set checkboxes per permissie?

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Stefan|IA2
  • Registratie: Mei 2008
  • Laatst online: 29-06-2021
Ik begrijp je niet helemaal, of jij begrijpt mij niet helemaal. ik zal de code wel effe laten zie hoe ik het wil:

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
<?php
                $qForumRoles = mysqli_query($mysqli, "
                    SELECT      role_id,
                                role_name
                    FROM        forum_roles
                ") or die(mysqli_error());
                
                while($rForumRoles = mysqli_fetch_assoc($qForumRoles)){
                    echo '<div class="row">';
                    echo '<label for="' .$rForumRoles['role_name']. '">' .$rForumRoles['role_name']. '</label>';
                    echo '<input type="hidden" name="role_id" id="role_id" value="' .$rForumRoles['role_id']. '" />';
                    echo '<select name="categorie_permissions" id="categorie_permissions" style="width: 310px;">';
                    
                    $qForumPermissions = mysqli_query($mysqli, "
                        SELECT      *
                        FROM        forum_permissies
                     ") or die(mysqli_error());
                    
                    while($rForumPermissions = mysqli_fetch_assoc($qForumPermissions)){
                        echo '<option value="' .$rForumPermissions['permission_id']. '">' .$rForumPermissions['permission_id']. '</option>';
                    }
                    echo '</select>';
                    
                    echo '</div>';
                }
                ?>


Nu wil ik voor iedere rol dat ik post de bijbehorende permissie posten zodat er een nieuwe rij aangemaakt kan worden in de tabel rol_permissie

mysqli_query($mysqli, "
INSERT INTO rol_permissie
(permission_id, role_id, categorie_id)
VALUES ('', '', '" .$_GET['categorie']. "')
") or die(mysqli_error());

Hier moeten alleen de permission_id en role_id nog opgevult worden door de nog te posten data. Alleen hoe doe ik dit.

@MueR, hoe zit dat met die array's, van array's snap ik nog niet heel veel.

EDIT: De rijen met permissies staan vast:

CREATE TABLE `forum_permissies` (
`permission_id` int(11) NOT NULL auto_increment,
`permission_read` enum('0','1') NOT NULL,
`permission_add` enum('0','1') NOT NULL,
`permission_edit` enum('0','1') NOT NULL,
`permission_del` enum('0','1') NOT NULL,
PRIMARY KEY (`permission_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

--
-- Gegevens worden uitgevoerd voor tabel `forum_permissies`
--

INSERT INTO `forum_permissies` VALUES(1, '1', '1', '1', '1');
INSERT INTO `forum_permissies` VALUES(2, '1', '1', '1', '0');
INSERT INTO `forum_permissies` VALUES(3, '1', '1', '0', '0');
INSERT INTO `forum_permissies` VALUES(4, '1', '0', '0', '0');
INSERT INTO `forum_permissies` VALUES(5, '0', '0', '0', '0');

[ Voor 18% gewijzigd door Stefan|IA2 op 04-10-2008 14:00 ]

Pagina: 1