user class rechten

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Typescript Developer / Cloud platform

Dit ga je doen (Door)Ontwikkelen van het cloud platform; (Door)Ontwikkelen van microservices; Bouwen van nieuwe functionaliteiten; Verbeteringen aandragen voor het cloud platform; Sparren met de business. Hier ga je werken Onze opdrachtgever, gevestigd in regio Eindhoven, levert een compleet dienstenpakket op het gebied van IT. Zij pakken verschillende (complexe) vraagstukken van grote organisaties op. De sfeer intern is gezellig en informeel. Men houdt van hard werken maar gezelligheid door middel van een borrel of gezamenlijke lunch komt er veel voor. Als Typescript ontwikkelaar word je onderdeel van het team gericht op de (door)ontwikkeling van hun eigen cloud platform welke wordt

Bekijk vacature »

Senior .NET developer

Functie As a Senior .NET developer you will work in our Research & development team. Our team consists of 17 colleagues! We are currently busy setting up a completely new architecture for a new product. We use VS2022 and .NET 6.0 for our new product. Your function is therefore mainly backend oriented. Since we develop measuring equipment for the chemical industry, it is also very important to develop high-quality software for its control. You are also responsible for designing, implementing and testing new features. For this position its also very important to ensure future-proof and sustainable architecture. Eisen - A

Bekijk vacature »

Medior Java developer

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Hands-on Solution Architect / Software Architect (

TenneT is hard groeiend om de onze ambities waar te kunnen maken. Zo nemen wij een leidende rol in het aanjagen van de energietransitie. Het werven van nieuw talent speelt daarin een cruciale rol. Wij zijn op zoek naar een gedreven Solution Architect / Software Architect op onze locatie Arnhem die hieraan wil bijdragen en misschien ben jij dat wel? Jouw bijdrage aan TenneT Je werkt samen met gedreven DevOps teams, bestaande uit frontend, backend en middleware developers, testers, UX-designers. Samen met de teams ben je continu op zoek naar de beste oplossingen voor onze klanten. Als Solution Architect onderzoek

Bekijk vacature »

Software Developer C# .NET

Functie omschrijving Zoek jij een nieuwe uitdaging binnen development waar je komt te werken binnen een flexibel, jong en ondernemend bedrijf? Wij zijn voor deze functie op zoek naar een C# .NET Developer die enthousiast wordt van het aansluiten en begeleiden van (complexe) nieuwe klanten. Verder begeleid je complexe projecten, ben jij iemand die altijd kansen ziet? Dan zoeken wij jou! Verder ga jij je bezighouden met: Het verbeteren van functionaliteiten binnen het dataplatform; Meedenken in oplossingsrichtingen; Werken aan de architectuur; Ontwikkelen van nieuwe technologieën. Bedrijfsprofiel Waar ga je werken? De organisatie waar je voor gaat werken heeft een onafhankelijk

Bekijk vacature »

Magento developer

Functie E-commerce is een ‘’snelle’’ wereld. Om hierin continu voorop te blijven omarmen ze in een vroeg stadium nieuwe technieken. Een webshop is nooit af en kan altijd beter, sneller en efficiënter. Tegelijkertijd hebben ze vanaf hun oprichting altijd vastgehouden aan kwaliteit boven snelheid, en dit loont. Als back-end developer fungeer je als het verlengstuk van hun klanten. Technisch complexe zaken pak je met liefde op, en hierin werk je samen met o.a. front-end developers en designers. Klanten verwacht hierin kwaliteit van het hoogste niveau en een proactieve, meedenkende rol bij het maken van zowel technische als strategische keuzes. Ga

Bekijk vacature »

Software Programmeur PHP

Functie Wij zijn op zoek naar een PHP programmeur voor een leuke opdrachtgever in omgeving Alblasserdam. Heb jij altijd al willen werken bij een bedrijf dat veilige netwerkverbindingen levert door middel van veilige oplossingen? Lees dan snel verder. Hoe kan jouw dag er straks uitzien? Je gaat software en webapplicaties ontwikkelen met behulp van de talen C / C++ / PHP. Je gaat technische klussen uitvoeren op locatie bij klanten. Je onderhoudt contact met de projectleider om er zeker van te zijn dat een projecten goed verlopen. Je gaat klanten ondersteunen op het gebied van geleverde software en webapplicaties. Tevens

Bekijk vacature »

Python developer Consultancy

Functie Als Python developer bij deze organisatie werk je voor verschillende klanten. Doordat de oprichter een groot netwerk heeft kun je zelf voorkeuren uitspreken in het type projecten dat je wilt gaan doen. Zo zijn er bijvoorbeeld langdurige of juist korte projecten, maar is ook het type klant, of project bespreekbaar. Werk jij bijvoorbeeld graag aan een nieuw, state-of-the-art web portaal of ben je liever betrokken bij een migratietraject van een bestaande applicatie? Wij gaan voor jou aan de slag! Eisen • Je bent een gedreven developer met sterke voorkeur voor Python • Je bent meer dan een codeklopper •

Bekijk vacature »

Intern - Junior PHP ontwikkelaar in fris en jong t

Bedrijfsomschrijving Werk jij graag een in fris, flexibel en jong team? Bij ons ben jij vrij om te bepalen waar jij het liefst werkt en op de vrijdag komen wij gezellig bij elkaar op kantoor. Flexibiliteit en vrijheid zijn bij ons de norm en dat geeft jou de ruimte en energie om het beste uit jezelf te halen! Ons team bestaat uit vijf enthousiaste collega's die jou graag ondersteunen in zowel je persoonlijke als professionele ontwikkeling. Met twee ervaren Senior Developers als mentoren ben jij in goede handen. Wij zien onszelf als een vriendengroep die gezamenlijk werken aan iets moois

Bekijk vacature »

Junior Software Developer (HBO / WO)

Functie omschrijving Wij zijn op zoek naar een Junior Software Developer! Sta jij aan het begin van je carrière en heb je net je HBO of WO-diploma in de richting van ICT of Techniek mogen ontvangen? En heb jij grote affiniteit met software development? Dan hebben wij bij Jelling IT Professionals de perfecte opdrachtgever in de omgeving van Utrecht, die jou tot een volwaardig Fullstack Software Developer gaat opleiden. Binnen deze grote organisatie krijg je ruime en professionele trainingen die jouw in korte tijd vakbekwaam maken. Niet alleen het aan technisch aspect, maar ook zeker jouw persoonlijke ontwikkeling wordt veel

Bekijk vacature »

PHP Developer

Functie omschrijving Als PHP Developer ga jij aan de slag met uitdagende software projecten. Jij gaat in deze functie software applicaties ontwikkelen. Deze software projecten zijn heel divers, en deze organisatie maakt software, van A tot Z. Klanten kunnen in elke sector werkzaam zijn, van profit tot non-profit. Deze software bouw je vooral in PHP en specifiek Laravel. Dit framework kent dus geen geheimen voor jou. De software die jij gaat ontwikkelen is heel divers, van urenregistratiesystemen tot compleet geautomatiseerde tools. In deze veelzijdige functie ga jij je zeker niet vervelen, elke dag bestaat weer uit nieuwe uitdagingen. Bedrijfsprofiel Deze

Bekijk vacature »

.NET Developer te Naarden

Bedrijfsomschrijving Voor mijn klant ben ik op zoek naar een .NET Developer om het huidige team te komen versterken. Deze organisatie bevindt zich in de logistieke sector, en zij hebben een eigen ERP systeem ontwikkeld dat zij inzetten ter optimalisatie van de logistieke processen van haar eindklanten. Deze organisatie bestaat inmiddels al ruim 20 jaar, waarbij zij een duidelijke missie hebben, namelijk: het werk van de eindklant makkelijker maken door de systemen die zij leveren. Ze werken over heel de wereld, wat deze organisatie een echte internationale speler maakt. Binnen de organisatie kenmerken ze zich door een dynamische en professionele

Bekijk vacature »

Consultant Low Code Developer

Functie omschrijving Heb jij verstand van datamodellering, NO CODE Platformen en kun jij het aan om projecten te leiden? Ben jij toe aan een nieuwe uitdaging en ben jij HBO afgestudeerd in de richting van IT? Voor een mooie opdrachtgever in omgeving Delft zijn wij op zoek naar een No Code developer die zich bezig gaat houden met het optimaliseren van bedrijfsprocessen bij klanten. Onderdelen functie Je gaat geen code kloppen maar bedenken hoe applicaties eruit moet komen te zien. Je gaat werken met een non code platform, je kunt denken aan Mendix of Betty Blocks. Je bent verantwoordelijk voor

Bekijk vacature »

Medior Java developer

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Productontwikkelaar Food

Wat ga je doen Als Productontwikkelaar Food ga je nieuwe producten ontwikkelen en bestaande producten verbeteren. Je bent hierbij betrokken bij het gehele proces: van productconcept naar proefreceptuur, het realiseren va het product (op kleine schaal) en het testen van producten in een productieomgeving. Verder: Bewaak je de status van verschillende fases van productontwikkeling en lever je tijdig de benodigde data aan Ben je bezig met de optimalisatie van oude en nieuwe recepturen Begeleid of organiseer je proefsessies (sensorisch onderzoek) in het team en/of bij klanten Onderhoud je contacten met de klanten, leveranciers van grondstoffen e.a. externe partijen Houd je

Bekijk vacature »
Tim S

Tim S

14/12/2012 00:32:49
Quote Anchor link
Goedenavond,

Ik ben bezig met het maken van een user class. Het is mij gelukt om de gebruiker in te loggen en per pagina te controleren of de gebruiker toestemming heeft om deze pagina te bezoeken. Nu wil ik ook graag dat ik kan controleren of de gebruiker toestemming heeft om bepaalde acties uit te voeren op deze pagina zoals verwijden en wijzigen.

Ik heb hieronder de klasse, de variabele $userModule komt nog niet uit de database omdat dit misschien nog gaat veranderen m.b.t. de rechten. Misschien heeft iemand een idee of kan iemand mij een beetje in de goede richting helpen. Als het niet lukt kan ik de klasse ook zo afmaken en dit later toevoegen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php
class User {
        
        protected $id = null;
        protected $userType = null;
        protected $userName = null;
        protected $email = null;
        protected $pass = null;
        protected $dateAdded = null;
        protected $userModule = array('pages','news');    
        
        public function logIn($user){
            if($user){
                isset($_SESSION['user']) == $user;    
            }
        }

        
        public function getId() {
            return $this->id;
            
        }

        
        public function getUserName(){
            return $this->userName;    
        }
        
        function
privilegeIsAllowed($privillege){
            
        }

        
        public function isAllowed($object){
            if(in_array($object,$this->userModule)){
                return true;
            }

            else{
                return false;
            }
        }
    }


    class userMapper extends User{
        
        protected $db;
        
        function
__construct(PDO $pdo){
            $this->db = $pdo;
        }

        
        public function setUser($userName,$pass) {
            
            $query = 'SELECT id, userType, userName, email, pass FROM users WHERE userName=:userName AND pass=:pass';
            $smtp = $this->db->prepare($query);
            $result = $smtp->execute(array(
                ':userName'        => $userName,
                ':pass'            => $pass,
            ));

            
            if($result){

                $smtp->setFetchMode(PDO::FETCH_CLASS, 'User');    
                $user = $smtp->fetch();    
                return $user;
            }

            else{
                return false;
            }
        }
    }

?>


Alvast bedankt!!
Gewijzigd op 14/12/2012 00:33:36 door Tim S
 
PHP hulp

PHP hulp

22/11/2024 04:50:00
 
Erwin H

Erwin H

14/12/2012 00:47:52
Quote Anchor link
Dit lijkt mij een typisch voorbeeld van een 'strategy pattern' als dat je wat zegt. Zo niet dan in het kort:
Je maakt een aparte set aan classes die de rechten van gebruikers beheren en allemaal dezelfde interface implementeren. Een object van een van deze classes injecteer je in het user object en dat object gebruikt zo'n rechten object om te weten te komen wat wel en wat niet mag. De rechten zou je uit een database kunnen halen, uit een tekst bestand, of (als het een niet al te groot aantal sets van rechten is) voor elke rechtenset een apart rechten class maken.
Voordeel van deze aanpak is dat je altijd, voor elke gebruiker dezelfde user class kunt gebruiken. De rechten laat je hier los van en wanneer nodig haal je een rechtenset op via een rechten class. Eventueel kan dit dan zelfs nog tijdens de executie van je script veranderen. Ook als je dan eens een extra rechtenset wilt aanmaken, dan hoef je de user class nooit aan te passen.

Hopelijk is bovenstaande niet al te abstract en kan je er iets mee.
 
Tim S

Tim S

14/12/2012 01:27:37
Quote Anchor link
Ik ben nog niet echt bekend met interfaces, maar als ik een interface gebruik kan ik dan in alle classes die hier onder vallen alle variabele/functies gebruiken behalve private?

Voor de rechten uit de database in combinatie met de verschillende modules(het grootste probleem) heb ik even in php een ideetje gemaakt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
//moet uit database komen
        $privileges = array(
        'pages'    => array('edit','delete'),
        'news'    => array('add'),
        );

        
        //het recht dat we willen gebruiken
        $privilege = 'add';
        //op het object de niews pagina
        $object = 'news';
        
        //kijken of het recht dat we willen gebruiken voorkomt in de rechten die de gebruiker heeft voor dit opject/pagina
        if(in_array($privilege,$privileges[$object])){
            echo 'ja het mag';
        }

        else{
            echo 'nee het mag niet';
        }

?>


ik controleer dan voor iemand de pagina wilt betreden of de ingelogde gebruiker toestemming heeft om de pagina $object te betreden. voor dat iemand dan iets wilt doen zoals verwijderen ga ik dan controleren isPrevilegeAllowed(); met iets zoals hierboven maar dan in een nieuwe klasse. Is dit een beetje in de goed richting?
Gewijzigd op 14/12/2012 01:28:14 door Tim S
 
Erwin H

Erwin H

14/12/2012 01:41:51
Quote Anchor link
Een interface is een belangrijk onderdeel van OOP, aangezien het een soort template is voor classes. Een interface heeft zelf geen implementatie en doet zelf niets, het definieert alleen een aantal methodes (en eventueel constantes) die een class moet implementeren.

In het geval van je rechten class kan je doormiddel van een interface dus afdwingen dat bepaalde methods om rechten te checken aanwezig zijn. Elke class die dus een rechten class wil zijn moet die interface implementeren en daarmee die methodes. Je user class kan vervolgens een type hint geven in de rechten injectie methode zodat je in de user class altijd zeker weet dat een geinjecteerd object de juiste methodes bevat.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
29
<?php
//interface voor all rechten classes
interface Rights_Interface{
  public function checkUserRights( $privilege );
}


//admin users hebben het recht
class Admin_Rights_Class implements Rights_Interface{
  public function checkUserRights( $privilege ){
    return true;
  }
}


//Unregistered users hebben het recht niet
class Unregistered_Rights_Class implements Rights_Interface{
  public function checkUserRights( $privilege ){
    return false;
  }
}


//user class met een method setRightsObject zodat een rechten object kan worden geinjecteerd
//alleen classes die Rights_Interface implementeren kunnen worden geinjecteerd,
//alle andere classes zullen een foutmelding opleveren.

class User_Class{
  public function setRightsObject( Rights_Interface $obj ){
    //zet het rights object in een property
  }
}

?>
Gewijzigd op 14/12/2012 01:42:51 door Erwin H
 
Tim S

Tim S

14/12/2012 12:53:11
Quote Anchor link
Ik wil wel gebruik gaan maken vaan een Rights interface, maar ik begrijp niet helemaal wat jij wilt doen met de klasse hierin.

Jij heb een klasse admin_Rights en een klasse Unregistered_rights, maar als ik controleer met een functie zoals ik nu heb dan heb je deze klasse niet nodig. Als gebruikers type heb je standaard admin moderator en author of iets in die richting. Wat ik wil is dus zelf gebruikers type aanmaken in een database. Zo kan ik iemand toestemming geven om bijvoorbeeld de nieuws module te gebruiken. Ook kan ik deze klasse in een website gebruiken, dan heb je wel een aantal standaard gebruikers.

Het lijkt mij dus een beetje omslachtig om voor elke type gebruiker een klasse aan te maken.
Ik dacht zelf dan aan een interface met een klasse om te controleren of de gebruiker toestemming heeft om de pagina te bezoeken en om te kijken welke handelingen de gebruiker vervolgens mag uitvoeren. Ook moet ik dan nog iets maken waarmee je rechten kan toevoegen o.i.d.
 
Erwin H

Erwin H

14/12/2012 13:09:03
Quote Anchor link
Dan moet je even terug naar wat ik eerder zei:
Erwin H op 14/12/2012 00:47:52:
De rechten zou je uit een database kunnen halen, uit een tekst bestand, of (als het een niet al te groot aantal sets van rechten is) voor elke rechtenset een apart rechten class maken.

Het voorbeeld is (om het even simpel te houden) gebaseerd op de laatste mogelijkheid, maar is niet de enige.
Wat je bijvoorbeeld kan doen is een paar rechten classes maken. Een voor admins (jij), want dat staat wel redelijk vast, ik neem aan dat je dat niet in een database zet, maar ook een voor normale gebruikers. Die geef je in die class dan bepaalde standaard rechten al mee (het niet mogen aanpassen van gebruikersrechten bijvoorbeeld, wat een admin wel zou mogen), andere haal je uit je database.

Het voordeel van zo'n structuur is dat je volkomen flexibel bent in wat je wilt. Zonder dat je ooit nog iets aan je user class hoeft te doen kan je het rechten systeem zo complex, of zo simpel houden als je zelf wilt.
 
Tim S

Tim S

14/12/2012 13:28:33
Quote Anchor link
Dus als ik het goed begrijp,
als gebruiker neem ik bijvoorbeeld Tim. Tim log ik in. Als ik ben ben ingelogd heb ik een een gebruikers type bijvoorbeeld admin.

Dan kan ik in een klasse maken voor admin en omdat ik een admin gebruiker ben ga ik naar die klasse. In die klasse kan ik dan bepalen welke rechten in heb per object. Waarbij de rechten en objecten uit een database kunnen komen. Deze worden dan vergeleken met het object wat ik per pagina aangeef(zoals nu: isAllowed('pages')).

Je kan dan een aantal gebruikers type aanmaken maar heb wel de optie om te bepalen welke rechten deze hebben.

Natuurlijk kan ik bij admin alle rechten vrijgeven.
Ik kan dan ook een normale gebruiker aanmaken zoals hier of dit forum en bijvoorbeeld een moderator. Bij moderator geldt bovenstaande beter.
Gewijzigd op 14/12/2012 13:39:01 door Tim S
 
Erwin H

Erwin H

14/12/2012 14:27:45
Quote Anchor link
In principe klopt het zo inderdaad. Zolang alle rechten classes maar dezelfde interface implementeren kan je er zo veel maken als je nodig hebt en de classes zelf laten bepalen waar ze aan hun data komen.

Enige nuance die ik zou willen aanbrengen is waar je zegt dat 'omdat ik een admin gebruiker ben ga ik naar die klasse', zou ik zeggen 'die klasse wordt dan meegegeven aan het user object'. De classes die gebruik gaan maken van een rechten object weten over het algemeen zelf niet welk object ze krijgen. Dat hoeven ze ook niet te weten, ze hoeven ook helemaal niet te weten wat dat rechten object precies doet, of hoe. Het enige wat ze willen is dat ze antwoord krijgen op de vraag of de user bepaalde rechten heeft of niet.
 
Wouter J

Wouter J

14/12/2012 14:28:02
Quote Anchor link
Dat klopt inderdaad. Voor beveiliging worden vaak de namen Autorization en Authentication gebruikt.

Dit zijn 2 klassen. De Authentication (of Firewall) klasse kijkt wie je bent, hij maakt een User klasse en stelt in welke rechten je hebt (dit doet hij per request, dus als je niet ben ingelogd krijg je de rechten voor 'Anonymous' of 'Gast' oid). De Autorization klasse kijkt of je wel rechten genoeg hebt om een bepaalde actie uit te voeren. Deze actie kan een pagina bezoeken, een button, ect. zijn.

De code wordt dan bijv:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
// de login pagina
session_start();

// ...
if ($form->isSend()) {
    $user = Authentication::createUserFromForm($form); // maak een user object aan de hand van form data, databases, ect.

    $_SESSION['user'] = serialize($user); // sla dat user object op in een sessie
}
?>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
// een doodgewone andere pagina
$user = Authentication::createUserFromGlobals(); // maakt een user object aan aan de hand van de eerder opgeslage sessie

// autorization: voor deze actie zijn Admin rechten nodig

if ($user->isGranted('ROLE_ADMIN')) {
    // ... een bepaalde actie voor de admin
}

if (!$user->isGranted('ROLE_USER')) {
    exit('deze pagina is alleen beschikbaar als je bent ingelogd');
}

?>
 
Tim S

Tim S

14/12/2012 16:19:01
Quote Anchor link
Ik zit alleen even met het probleem dat de user class niet is verbonden met de andere. Hoe kan ik dan het beste een rechten object injecteren?
 
Wouter J

Wouter J

14/12/2012 16:24:59
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
class Authentication
{
    public static function createUserFromForm($form)
    {

        $username = $form->fields->name;     // verander deze naar wat jij gebruikt
        $password = $form->fields->password; // om form variable op te halen

        $role = ...; // haal de role (ROLE_ADMIN, ROLE_MOD, ROLE_USER,ect.) ergens vandaan
        $role = new Role($role); // Erwin noemde dit Rights (het zou dan bijv. `new Admin_Rights` worden)

        $user = new User();
        $user->setRole($role);
    }
}

?>
 
Reshad F

Reshad F

14/12/2012 18:57:19
Quote Anchor link
Wouter jij liet me een tijdje terug ook een mooi voorbeeld zien namelijk

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
29
30
31
32
33
34
35
36
37
38
<?php

abstract class Person {

  private $name;
  protected $level;

  const LEVEL_GUEST = 1;
  const LEVEL_USER = 2;
  const LEVEL_MOD = 4;
  const LEVEL_ADMIN = 8;

  public function __construct($name) {

    $this->setName($name);
    $this->setLevel(); // set in subclass

  }

  public function setName($name) {

      $this->name = ucwords(strtolower($name));

  }


  public function getName() {
      return $this->name;
  }


  public function getLevel() {
      return $this->level;
  }


  abstract protected function setLevel();

}


?>


Wat is het verschil tussen deze 2 manieren en welke is beter/flexibeler?

een class ziet er dan als volgt uit bijvoorbeeld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
class Admin extends Person
{
    private $id;

    public function __construct($name, $id)
    {

        parent::__construct($name);
        $this->setId($id);
    }


    public function setId($id)
    {

        $this->id = $id;
    }


    protected function setLevel()
    {

        $this->level = PERSON::LEVEL_ADMIN;
    }
}

?>
 
Wouter J

Wouter J

14/12/2012 21:26:58
Quote Anchor link
De manier die hier besproken wordt is de meest flexibele en de manier die jij hebt geleerd is de manier die je als beginner leert om om te gaan met overerving, ect.
 
Tim S

Tim S

14/12/2012 21:57:06
Quote Anchor link
Ik ben even wezen nadenken, maar ik zie even het nut niet meer om voor alle rollen/rechten een aparte klasse aan te maken. Is het niet makkelijker om de rollen en rechten per gebruiker in een tabel te stoppen en te koppelen aan de user. Ik hoer dan ook niet te controleren of de gebruiker een admin gebruiker is maar ik kijk isGranted. Maar daar wil ik dan de pagina gebruiken in plaats van de rol.

dus:
if($user->isGranted('nieuwsmodule')){
}

Dit is meer werk met de database maar is volgens mij makkelijker. Ik weet alleen niet of dit een goede manier is...?

Toevoeging op 15/12/2012 01:23:37:

@wouter

is de autentication klasse een vervanging van de mapper, dus kan je hierin ook gebruikers registreren of is het verstandig hier een nieuwe klasse voor te maken?
 
Wouter J

Wouter J

17/12/2012 23:09:31
Quote Anchor link
Quote:
Dit is meer werk met de database maar is volgens mij makkelijker. Ik weet alleen niet of dit een goede manier is...?

Het lijkt mij niet makkelijker... Stel je site wordt een succes en je wilt na een jaar een nieuwe feature toevoegen die alleen zichtbaar is voor moderators of hoger. Dan zul je dus in de database overal deze rechten moeten toevoegen voor elke gebruiker die moderator of hoger is en vervolgens ook nog je PHP code aanpassen.
Het lijkt mij veel makkelijker om een paar standaard ROLES te hebben en dan per feature in PHP te kijken welke role ervoor nodig is. Zo beperk je deze ROLES ook niet tot 1 onderdeel, namelijk de HTML, maar kun je ook pagina's en controllers gaan afschermen.

Quote:
is de autentication klasse een vervanging van de mapper, dus kan je hierin ook gebruikers registreren of is het verstandig hier een nieuwe klasse voor te maken?

Nee, registratie gebeurd apart, het inloggen kan wel door de authentication klasse gedaan worden.
 
Tim S

Tim S

17/12/2012 23:47:53
Quote Anchor link
Oke bedankt voor je reactie,

Ik ben nog bezig met de klasse maar heb het als volgt gedaan.

Rollen:
admin - heeft alle rechten en kan modules activeren voor website eigenaar.
moderator - mag alles of de geactiveerde modules(is eigenaar website)
custom - heeft alle rechten tot modules maar maximaal die van de moderator

wat nog kan:
registered
premium registered

elke website die ik maak is in combinatie met een eigen cms. Ik heb nu een tabel users voor de gegevens van de gebruiker. Ook heb ik een tabel user_static_roles Hierin staan de standaard rollen zoals moderator of registered. In deze tabel staan de modules die beschikbaar zijn voor het cms en de website. Hierin ga ik er vanuit dat je voor de website gewoon een of twee modules maakt zoals bijvoorbeeld registered en premiumUser.

Hieronder de klasse(hij is nog niet af):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
<?php
function isModuleActive($var)
{

    //stuurt de array key alleen terug als in de value true staat.
    //de array bestaat dan alleen uit actieve modules.

    return ($var == 'true');
}




   /*    userRoles interfece
    *    -class isAdmin(alle rechten)
    *    -class isModerator(alle rechten op aangeschafte modules)
    *    -class isCustom(alle rechten die worden aangegeven op aangeschafte modules)
    */
    
    
    interface userRoles{
        
        public function isGranted($roleObject);
        public function setUserRoleInSession($userRole);
    }

    
    class isAdmin{
    
        public function setUserRoleInSession($userRole){
            $_SESSION['userRole'] = serialize($userRole);    
        }

    
        public function isGranted(){
            return true;
        }
    }

    
    class isModerator{
        
        protected $userModules;
        protected $db;
        protected $userId;
        
        
        function
__construct($pdo,$userId){
            $this->db = $pdo;
            $this->userId = $userId;
        }

        
        public function setUserRoleInSession($userRole){
            $_SESSION['userRole'] = serialize($userRole);    
        }

        
        private function setActiveModules(){
            
            $query = 'SELECT *
                      FROM user_static_roles  
                      WHERE user_type=:user_type'
;
            $smtp = $this->db->prepare($query);
            $result = $smtp->execute(array(
                        'user_type'    =>    'moderator',
                        ));

        
            if($result){
                
                foreach($smtp->fetchAll(PDO::FETCH_ASSOC) as $row){
                
                $this->userModules[] = array_filter($row, "isModuleActive");
                
                }    
            }
        }

        
        public function isGranted($roleObject){
            $this->setActiveModules();
            
            if(!empty($this->userModules)){
                
                if(array_key_exists($roleObject,$this->userModules['0'])){
                    
                    //tijdelijk de array printent
                    print_r($this->userModules);
                    
                    
                    if(in_array('true',$this->userModules['0'])){
                    
                    return true;
                
                    }
                }    
            }    
        }
    }

    
    class isCustomRole{
    
        protected $userModules; //array met modules
        protected $db;//database
        protected $userId;
        protected $userPreivileges;//array met rechten
        protected $roleObject;//het object
        
        
        
        function __construct($pdo,$userId){
            $this->db = $pdo;
            $this->userId = $userId;
        }

        
        public function setUserRoleInSession($userRole){
            $_SESSION['userRole'] = serialize($userRole);    
        }

        
        private function setActiveModules(){
            
            $query = 'SELECT *
                      FROM user_roles  
                      WHERE user_id=:userId'
;
            $smtp = $this->db->prepare($query);
            $result = $smtp->execute(array(
                        'userId'    =>    $this->userId,
                        ));

        
            if($result){
                
                foreach($smtp->fetchAll(PDO::FETCH_ASSOC) as $row){
                
                $this->userModules[] = array_filter($row, "isModuleActive");
                
                }    
            }
        }

        
        public function isGranted($roleObject){
            
            $this->setActiveModules();
            
            if(!empty($this->userModules)){
                
                if(array_key_exists($roleObject,$this->userModules['0'])){
                    
                    //tijdelijk de array printent
                    print_r($this->userModules);
                    
                    
                    if(in_array('true',$this->userModules['0'])){
                    
                    return true;
                
                    }
                }    
            }
        }
    }

    
   /*    class user
    *    
    */

    
    
    class User{
    
        protected $userId        = null;
        protected $userName     = null;
        protected $pass            = null;
        protected $userType     = null;
        protected $email        = null;
        protected $dateAdded    = null;
    
        
        public function setUserInSession($user){
            $_SESSION['user'] = serialize($user);    
        }

        
        public function getUserName(){
            return $this->userName;    
        }

        
        public function getuserType(){
            return $this->userType;    
        }

        
        
        public function setRoleClass($db){
            
            switch ($this->userType){
                
                case
'admin' :
                
                return $user = new isAdmin();
                
                break;
                
                case
'moderator' :
                
                return $user = new isModerator($db,$this->userId);
                
                break;
                
                case
'custom':
                
                return $user = new isCustomRole($db,$this->userId);
                
                break;
                
                case
'registred':    
                
                break;
            }
                
        }
    }


   /*    class userAuthentication
    *    
    */

    
    
    class userAuthentication{
        
        public static function createUserFromForm($db,$name,$pass){
            
            $smtp = $db->prepare('SELECT id, userName, pass, userType, email, dateAdded
                                  FROM users WHERE userName=:userName AND pass=:pass'
);
            
            $smtp->setFetchMode(PDO::FETCH_CLASS, 'User');
                                  
            $result = $smtp->execute(array(
                'userName'    =>    $name,
                'pass'        =>    $pass,
            ));

            
            if($result){
            
            $user = $smtp->fetch();
            
            return $user;    
                
            }
        }

        
        public static function createUserFromSession(){
            $user = $_SESSION['user'];
            return unserialize($user);
        }

        
        public static function createUserRoleFromSession(){
            $userRole = $_SESSION['userRole'];
            return unserialize($userRole);
        }
    }

?>


het gebruik:

de login pagina:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
session_start();

include 'userClass.php';

    $db = new PDO();
    
    $user = userAuthentication::createUserFromForm($db,'tim','test');
    $user->setUserInSession($user);
    
    
    
    $userRole = $user->setRoleClass($db);
    $userRole->setUserRoleInSession($userRole);
?>


een andere pagina:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
29
30
<?php
session_start();

include 'userClass.php';
$user = userAuthentication::createUserFromSession();

$userRole = userAuthentication::createUserRoleFromSession();
echo $user->getuserType();

// een module bijvoorbeeld news
if($userRole->isGranted('news')){
    echo 'gebruiker is hier toegestaan';
        
}

else{
    echo 'gebruiker is hier niet toegestaan';
}


//een admin pagina,kan je een module voor aankamen kan ook zo
if($userRole->isGranted('admin')){
    echo 'gebruiker mag hier zijn';
}


//een pagina voor geregistreerde gebruikers

if($userRole->isGranted('registered')){
    
    //laat hier bijvoorbeeld een menu zien
}
?>


Ik ben erg benieuwd wat jij hier van vindt, ik zal dan voor het registreren een andere klasse aanmaken.
Ik kan hier zelf in elk geval alle kanten meer op, weet alleen niet zeker of het op sommige plaatsen netter kan.

Toevoeging op 18/12/2012 11:50:47:

Pdo werkt niet met serialize dus de functie setActiveModules moet je vanaf buiten aanroepen.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.