Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

[PHP5] OOP gebruikersklassen: specialisatie mogelijk?

BasHamar
3 antwoorden
  • Sorry voor de wellicht wat onduidelijke titel, maar wist het zo snel niet anders te verwoorden.

    Mijn probleem is als volgt: stel je hebt verschillende gebruikersklassen. De 'hoogste' klasse is [i:c9419b0645]User[/i:c9419b0645], met daaronder [i:c9419b0645]Admin extends User[/i:c9419b0645]. Er zijn er in werkelijkheid meerdere, maar voor dit verhaal is dat niet interessant. [i:c9419b0645]User[/i:c9419b0645] heeft een [i:c9419b0645]public function getUserLevel()[/i:c9419b0645], op basis waarvan ik bepaalde rechten aan de gebruiker wil geven. Geheel volgens de regels van OOP heb ik de adminrechten ook in de [i:c9419b0645]Admin[/i:c9419b0645]-klasse gestop. Ik heb nu dus de volgende constructie:
    [code:1:c9419b0645]// Instantie van User aanmaken met gebruikersnaam BasHamar
    $user = new User("BasHamar");

    // Controleer wachtwoord
    if($user->validateUser("wachtwoord")){

    // Vraag gebruikersniveau op
    $userLevel = $user->getUserLevel();

    // hier moet dan iets gebeuren, ik weet alleen niet wat…
    }[/code:1:c9419b0645]
    Nu wil ik dus van [i:c9419b0645]$user[/i:c9419b0645] een [i:c9419b0645]Admin[/i:c9419b0645] maken ipv [i:c9419b0645]User[/i:c9419b0645]. In principe zou dit moeten kunnen aangezien alle functies en variabelen van [i:c9419b0645]User[/i:c9419b0645] ook automatisch in [i:c9419b0645]Admin[/i:c9419b0645] zitten, maar hoe kan ik dit omzetten?

    Overigens vermoed ik dat het helemaal niet zo simpel is of misschien zelfs helemaal niet kan, maar als het wel mogelijk is maakt het mijn leven een stuk makkelijker.

    Iemand een suggestie?

    Alvast heel erg bedankt!

    - Bas
  • Als BasHamar een Admin is, waarom maak je $user dan een instantie van User en niet meteen van Admin? Of bedoel je dat je BasHamar wil 'upgraden' naar een Admin-level?

    Waarom is er overigens een losse Class voor Admin? Ik zou het logischer vinden dat een gebruiker gewoon altijd een User is, maar dat de gekoppelde rechten bepalen welke rol dat-ie heeft (of eigenlijk is het net andersom). Na het authenticeren van de gebruiker ($user->validateUser()) weet je wie hij is en kan je dus bepalen welke rol hij heeft. Andere rol toekennen zou dan iets worden als:
  • Annie, bedankt voor je antwoord.
    [quote:46aba09ca9="Annie"]Als BasHamar een Admin is, waarom maak je $user dan een instantie van User en niet meteen van Admin? Of bedoel je dat je BasHamar wil 'upgraden' naar een Admin-level?[/quote:46aba09ca9]Ik weet niet of BasHamar een Admin is, dus dat moet ik eerst testen. Om te testen heb ik een functie ín User (en dus ook in Admin) staan, dus daar moet ik eerst een opject van initialiseren. Indien hij inderdaad Admin is wil ik zijn object inderdaad 'upgraden'.
    [quote:46aba09ca9="Annie"]Waarom is er overigens een losse Class voor Admin?[/quote:46aba09ca9]Bij goed OOP werk je met het scheiden in losse objecten en het overerven van functies en variabelen. Een User heeft niets te maken met de functies van de Admin en daarom zouden de functies daar misplaatst zijn. [quote:46aba09ca9="Annie"]Ik zou het logischer vinden dat een gebruiker gewoon altijd een User is, maar dat de gekoppelde rechten bepalen welke rol dat-ie heeft (of eigenlijk is het net andersom). Na het authenticeren van de gebruiker ($user->validateUser()) weet je wie hij is en kan je dus bepalen welke rol hij heeft. Andere rol toekennen zou dan iets worden als:

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.