Ontwerpen usermanagement

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

PHP kans met mogelijkheid tot auto!

PHP functie 3 jaar met Zend Functieomschrijving Je gaat met je team werken aan hele slimme nieuw op te zetten PHP applicaties voor professionele bedrijven. Omdat ze steeds voorop willen blijven lopen is er voor jou veel ruimte om te pionieren met nieuwe technologie en hierin verder te groeien als PHP developer. Naast het werken met nieuwe technologie zijn de voorwaarden ook heel goed, denk aan lekker veel vakantiedagen, goede regelingen en een mooie werkplek om het beste uit jezelf te halen. Om voor deze rol in aanmerking te komen dien je ervaring te hebben met Symfony2, Zend of een

Bekijk vacature »

Werkplekbeheerder

Gezocht voor een vast dienstverband bij onze opdrachtgever in Almere zoeken wij ee De klantomgeving Onze klant is een jonge en zeer dynamische organisatie, welke bestaat uit 280 enthousiaste, taakvolwassen, ambitieuze collega’s professionals met een echte winnaar mentaliteit en grenzeloze creativiteit. Hierdoor weten zij vele kansen in de markt te benutten. Onze opdrachtgever is de marktleider binnen haar segment. Als Werkplekbeheerder ICT val je onder de afdeling ICT Operations & Services. Deze afdeling is verantwoordelijk voor het (her)ontwerp van bedrijfsprocessen, het ICT platform en de benodigde infrastructuur. Samen met 19 zelfstandige ICT professionals waarborg je de juiste balans tussen de

Bekijk vacature »

Technisch Ontwerper / Applicatieontwikkelaar max.

Op woensdag 6 november organiseert CIMSOLUTIONS op 7 locaties in Nederland het ICT Professional Event. Tijdens deze avond kun je naast een hapje en een drankje onze sfeer komen proeven. Maak kennis met CIMSOLUTIONS, onze collega’s en beleef de ervaringen van onze ICT specialisten én de projecten waar zij het verschil maken. Kijk voor meer informatie en/of aanmelden hier. Wie zoeken we? Je bent de beste in je vak of hebt de ambitie en de potentie om de beste te worden. Je hebt de passie om nieuwe technologieën te blijven leren en continu jezelf te ontwikkelen. Je hebt de pioniersgeest

Bekijk vacature »

Senior Android Developer vacature

Je bent creatief. Je wilt verschil maken. Je gaat voor mobile. Voor het bedenken, ontwerpen en realiseren van sterke mobile-apps mag men jou ’s nachts wakker maken. Jij weet hoe je Android-apps met impact ontwikkelt en levert ze op tijd af. Of het nu gaat om betalen met een vingerafdruk, het delen van de bar-rekening of het mobiel aanpassen van de (sfeer-)verlichting in huis, jij weet welke integrale functionaliteiten toegevoegde waarde hebben voor de eindgebruiker. Jij zorgt er bovendien voor dat jouw apps het toonbeeld zijn van gebruikersvriendelijkheid en veiligheid. Omdat je breed georiënteerd bent, kun je ook prima buiten

Bekijk vacature »

Full-stack .NET developer gezocht, Goeree-Overflak

Ben je een .NET software developer en op zoek naar een professionele werkomgeving binnen een wat groter innovatief en ambitieus bedrijf? Waar sprake is van een uitgebreid applicatielandschap met elke dag nieuwe uitdagingen, waar alles mogelijk is, binnen een goede collegiale sfeer? Lees dan verder! Voor een bedrijf in Goeree-Overflakke zijn we momenteel op zoek naar een ervaren software developer. De IT afdeling bestaat uit circa 60 mensen waarvan zo'n 15 developers. Voor de recente architectuur wordt gebruikt gemaakt van de nieuwste technieken waaronder .NET Core, Docker en Angular. Echter bestaat het applicatielandschap uit een groot aantal verschillende applicaties waarbij

Bekijk vacature »

Senior iOS Developer vacature

Je bent innovatief. Je bent creatief. Jij gaat voor een topbaan. Mobile apps ontwerpen, uitwerken en realiseren, dat is jouw passie! Met grote toewijding richt jij je dan ook op een app waarmee consumenten met een gezichtsscan betalen. Of je stort je je op een app die de temperatuur in huis op afstand kan regelen. Het spreekt voor zich dat jouw apps top of the bill zijn als het gaat om gebruiksvriendelijkheid en veiligheid. Ze hebben impact. Je voelt je als een vis in het water in een iOS-omgeving maar, veelzijdig als je bent, kun je ook met andere platforms

Bekijk vacature »

Java Custom Software Developer

Jouw rol Als Java developer houd jij van uitdagende maatwerk oplossingen. Het liefste bouw je aan aan complexe en grootschalige oplossingen. Laatst zag je bijvoorbeeld nog een slimme oplossing voorbij komen die je graag zou willen uitwerken. Moet je daarvoor nieuwe technologie leren kennen, dan school jij jezelf bij. Soms moet je je collega's en de klant overtuigen om jouw idee te omarmen. Als jij dan het door jou aangebrachte idee ziet draaien dan kijk jij er alweer naar uit om de volgende oplossing te bouwen. Plaats in de organisatie Binnen onze Custom Software Development practice (CSD) werken we gezamenlijk

Bekijk vacature »

Senior PHP-developer

Gezocht: Senior PHP-developer Wil jij aan de slag met interne start-ups, bestaande applicaties verbeteren en in een jong en bruisend onderwijsbedrijf werken? Dan is de functie van backend developer bij Lyceo iets voor jou! Wat je gaat doen Als developer bij Lyceo ben je één van die geniale types binnen de organisatie. Je gebruikt jouw kwaliteiten achter de schermen om top online services te bouwen. Je zorgt ervoor dat Lyceo ook op technisch vlak de beste onderwijsondersteuner van Nederland is. Dit doe je door het verder ontwikkelen van bestaande applicaties, maar ook door deel te nemen aan interne start-ups voor

Bekijk vacature »

Front-End Developer / JavaScript/ React/ 4300 euro

Functieomschrijving Ben jij een front-end developer die niets van de wereld wil missen? Wil jij dat jouw werkzaamheden zichtbaar zijn voor een groot publiek? Beschik jij over kennis van de modernste technieken en ben je in staat snel te switchen tussen verschillende projecten? Lees dan snel verder! Het ontwikkelen van applicaties (25%) en websites (75%) met behulp van JavaScript, React, jQuery, SASS en Git; Werken aan lange termijn projecten; Oppakken van ad hoc activiteiten en processen; Nieuwe ontwikkelingen in de gaten houden en toepassen; Analytisch en kritisch meedenken over verbeteringen in tools en werkwijzen. Functie-eisen Je hebt HBO/WO werk- en

Bekijk vacature »

.NET Developer en vele mooie projecten!

Functieomschrijving Als .NET developer is geen dag hetzelfde bij deze werkgever. Dat komt door de vele projecten waar je dagelijks mee bezig bent. Bijna iedere dag ben je weer bezig met iets nieuws en dat is niet alleen fijn voor de klant, maar ook vooral voor jou aangezien je continu met verschillende (nieuwe) technieken mag gaan werken als Microsoft .NET Software Developer. In deze functie ben je samen met je collega’s verantwoordelijk voor het ontwikkelen en onderhouden van de bestaande websites en webapplicaties maar ook complete software pakketten gericht op bijvoorbeeld CRM. Je loopt hiernaast mee in het ontwikkeltraject om

Bekijk vacature »

Angular Developer gezocht in Twente - alle niveaus

Functieomschrijving Als Angular Developer kom jij hier dagelijks voor technische uitdagingen te staan. Uiteraard deins je daar niet voor terug. Je komt in een hecht team en jij gaat je focussen op nieuwbouw van (mobiele) applicaties, websites en interfaces, maar ook op het verder uitbouwen en onderhouden van bestaande applicaties, websites en interfaces. De focus van jouw werkzaamheden ligt op Frontend ontwikkeling. Je wordt enthousiast van het bouwen van gelikte (web)applicaties, je hart gaat sneller kloppen van UX Design en Singe Page Applications zijn bekend terrein voor je of wekken je interesse. Voorbeelden van recente projecten en dus projecten waar

Bekijk vacature »

Business Intelligence developer

Jij ben niet bang om hard te werken. Uitdagingen zijn welkom. En problemen? Die zijn er om opgelost te worden of, nog beter, om voorkomen te worden! Voor jij aan de slag gaat met het ontwerpen van BI- en DWH-oplossingen, leg je eerst je oor te luister bij de klant. Zo weet jij wat de klant wil, en hoe jouw ontwerp eruit moet komen te zien. Simpel! Althans… met jouw Developer-kwaliteiten wel! Over deze BI vacature Als Business Intelligence Developer ga je zowel op locatie bij de klant aan de slag, als op een van de Sogeti-locaties. Je analyseert de

Bekijk vacature »

SQL Developer / SQL DBA / Financiële instelli

Functieomschrijving Ben jij een ervaren SQL Developer / SQL DBA die houdt van een uitdaging? Heb je ruime ervaring met SQL, SQL Server, SSIS en het bouwen van queries? Lijkt het jou interessant om verantwoordelijk te zijn voor de gehele Nederlandse database omgeving van deze internationale financiële organisatie? Lees dan snel verder! Verantwoordelijk voor operationele werking van de database omgeving voor alle Nederlandse vestigingen; Schrijven van SQL queries; Beantwoorden complexe integratie vraagstukken; Meewerken aan uiteenlopende interne projecten en organisatiebrede migratie trajecten; Requirements opstellen; Fungeren als sparringspartner voor de business. Functie-eisen HBO werk- en denkniveau; Minimaal drie jaar ervaring in een

Bekijk vacature »

Medior Microsoft Dynamics Developer

Jouw uitdaging: Ben jij sterk in het succesvol ontwikkelen van maatwerk componenten op het Dynamics platform? En wil je actief meewerken aan de ontwikkeling van ons Digital Customer Experience portfolio? Dan is dit iets voor jou! Voor de Digital Customer Experience afdeling (DCX) zijn we op zoek naar een Medior Microsoft Dynamics Developer. In deze functie ben je verantwoordelijk voor de succesvolle ontwikkelen van maatwerk componenten op het Dynamics platform bij toonaangevende organisaties. Denk daarbij aan het realiseren van integratie met front en backoffice systemen op basis van Azure PaaS of het ontwikkelen van complexe plug-ins. Daarnaast werk je actief

Bekijk vacature »

Senior iOS Developer vacature

Je bent innovatief. Je bent creatief. Jij gaat voor een topbaan. Mobile apps ontwerpen, uitwerken en realiseren, dat is jouw passie! Met grote toewijding richt jij je dan ook op een app waarmee consumenten met een gezichtsscan betalen. Of je stort je je op een app die de temperatuur in huis op afstand kan regelen. Het spreekt voor zich dat jouw apps top of the bill zijn als het gaat om gebruiksvriendelijkheid en veiligheid. Ze hebben impact. Je voelt je als een vis in het water in een iOS-omgeving maar, veelzijdig als je bent, kun je ook met andere platforms

Bekijk vacature »

Pagina: 1 2 3 4 5 volgende »

Write Down

Write Down

27/06/2012 19:52:42
Quote Anchor link
Hi

Ik zit er aan te denken om nog eens wat in PHP te gaan doen. Als basis wil ik eerst en vooral een degelijk 'usermangement system' opzetten. Dit in een object gericht concept.

Omdat hierbij zowel het databaseontwerp als het implementeren van de code zelf belangrijk zijn, zou ik deze graag beiden bespreken.

De database zou ik als volgt willen inrichten:
http://www.imgdumper.nl/uploads5/4feb4638b7d22/4feb4638b32ed-test.png

Misschien kort even het schema toelichten:
In de database wordt over elke gebruiker wat basisgegevens bijgehouden. Er kunnen eventueel een aantal opmerkingen gemaakt worden over een gebruiker. (bv. zijn specifieke functie op de website). Verder is er verplicht een koppeling met de permissies tabel. Uiteraard, behoord een 'permissie-entry' altijd aan 1 specifieke gebruiker. (kleine opmerking hieronder) Verder worden alle belangrijke zaken die een gebruiker uitvoert gelogd. Tot slot is er nog een tabel met sessies in (Ik ben van plan een eigen session handler te programmeren die via de database werkt.) Elke sessie verwijst naar 1 gebruiker.

[opmerking permissies]
Ik overweeg dit nog wat aan te passen, namelijk een toevoeging: groups. Elke gebruiker krijgt dan een group en een group krijgt op zijn beurt een aantal permissies.

In PHP zou ik dan volgende klassen bekomen:
Session, User, Log, Note. Wat deze doen, lijkt mij vanzelfsprekend. Indien dat niet het geval zou zijn, wil ik dit gerust even toelichten.

Graag jullie mening over dit 'model'!
 
PHP hulp

PHP hulp

16/10/2019 17:31:14
 
Wouter J

Wouter J

27/06/2012 23:04:13
Quote Anchor link
Over databases heb ik geen verstand, over de OO kant wel.

Probeer wat meer te programmeren/denken naar een interface*. De objecten die je nu hebt zijn allemaal objecten via programmeren naar een implementatie. Dat is niet verstandig.
Zo heb je nu bijv. de Session implementatie, maar wil je straks liever een File implementatie van het opslaan van de gebruiker of een cookie implementatie. Het is dus beter om deze terug te leiden naar 1 interface: Storage. Deze bevat de basis, vervolgens heb je de SessionStorage klasse die voor de implementatie zorgt.

Ditzelfde moet je doen voor bijv. de Log klasse. Nu heb je een database log, straks een logfile, vervolgens een email log. Daarom moet je 1 interface Log hebben die voor de basis zorgt en verschillende subklassen die voor de implementatie zorgen. Een leuk voorbeeld van log kun je hier vinden: Een logging class in OO - Jelmer.

Tevens zal ik eens kijken naar het STRATEGY pattern. Hiermee regel je wat de gebruiker mag en kan. Even snel wat gemaakt in plain text (hoort natuurlijk in een UML diagram)
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
             +---------------------+                +-------------------------+
             |    <<interface>>    |                |          User           |
             |  RemoveUserStrategy |                +-------------------------+
             +---------------------+                | ...                     |
             | removeUser()        |--------------> | removeUserStrategy      |
             +---------------------+                +-------------------------+
                  ^           ^                     | ...                     |
                 /             \                    | addRemoveUserStrategy() |
                /               \                   +-------------------------+
+------------------+        +----------------+
| CannotRemoveUser |        | CanRemoveUser  |
+------------------+        +----------------+
| removeUser() {   |        | removeUser() { |
|     // exception |        |  // removeUser |
| }                |        | }              |
+------------------+        +----------------+


Kort gezegd heb je de klassen op object niveau door, alleen moet je nu nog gaan nadenken over de objecten op implementatie (of eigenlijk juist niet op implementatie) niveau. Je moet nu gaan nadenken over de structuur van je applicatie en hoe je die zo flexibel mogelijk maakt.

* Met interface doel ik hier niet per se op een interface zoals we die in PHP kennen. Maar ik bedoel een superklasse, het kan dus ook een abstracte klasse zijn.
Gewijzigd op 28/06/2012 07:47:57 door Wouter J
 
Write Down

Write Down

28/06/2012 15:03:54
Quote Anchor link
Dat is inderdaad wel een leuke denkwijze. Inderdaad een beetje kijken wanneer het interessant is gebruik te maken van een interface / abstracte klasse / beide.

Bedankt, hiermee kan ik zeker wat. Misschien nog een toevoeging, is het interessant om de 'log' klasse te gaan verwerven met een Exception klasse? Dan kan een exception bv. een bepaalde log-methode worden meegegeven.
 
Wouter J

Wouter J

29/06/2012 12:09:51
Quote Anchor link
Nee, misschien wel zo maken dat de ExceptionHandler klasse een HEEFT_EEN relatie heeft met de Log klasse. Dat je in de ExceptionHandler kan doen:
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
<?php
class ExceptionHandler
{
    protected $log; // log klasse

    // ...


    public function handle(\Exception $exception)
    {

        $message = sprintf('%s(%i) [%d] %s',
                           $exception->getFile(),
                           $exception->getLine(),
                           date('c'),
                           $exception->getMessage()
                          );

        $log->log($message, $exception->getCode());
    }
}

?>


Hierbij vang je dus een exception op. Vervolgens laat je die afhandelen door de ExceptionHandler. De code van de Exception is vervolgens het niveau van de log, zoals je in dat voorbeeldje van Jelmer kan zien.

En je moet eigenlijk altijd naar een interface/abstracte klasse programmeren, dat is het meest flexibel. Als je ook nog methods hebt die in elke subklasse gelijk zijn (of zouden zijn, altijd verder denken dan wat je nu hebt) dan maak je geen interface maar een abstracte klasse.
 
Write Down

Write Down

29/06/2012 15:19:50
Quote Anchor link
In dit geval moet je nog $log dan toch ergens meegeven in een constructor?
 
Wouter J

Wouter J

29/06/2012 15:28:35
Quote Anchor link
Ja, mooi via DI. Nog mooier zou het zijn als je een service container zou werken. Dan heb je iets als:
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
<?php
$container
= new Container();

$container->set('log.class', 'FileLog');
$container->set('log.config', array('logs/exceptions.log'));
$container->set('log', function($c) {
    $reflection = new \ReflectionClass($c->get('log.class'));

    if (!$reflection->isSubclassOf('Log')) {
        throw new InvalidArgumentException('log.class does not implement the Log interface');
    }


    return $reflection->newInstanceArgs($c->get('log.config'));
});


$container->set('exceptionHandler.class', 'ExceptionHandler');
$container->set('exceptionHandler.config', array($container->get('log')));
$container->set('exceptionHandler', function($c) {
    $reflection = new \ReflectionClass($c->get('log.class'));

    if (!$reflection->isSubclassOf('Handler')) {
        throw new InvalidArgumentException('exceptionHandler.class does not implement the Handler interface');
    }


    return $reflection->newInstanceArgs($c->get('exceptionHandler.config'));
});


$exceptionHandler = $container->get('exceptionHandler');

try {
    $foo = new Foo();

    $foo->setBar('12'); // gooit met exceptions
} catch (\Exception $e) {
    $exceptionHandler->handle($e);
}

?>
Gewijzigd op 29/06/2012 16:56:15 door Wouter J
 
Write Down

Write Down

29/06/2012 16:45:48
Quote Anchor link
Bedankt wouter!

Alleen, wat is precies de bedoeling van 'reflection'? Overigens, wat is het voordeel van zo'n container?
 
Wouter J

Wouter J

29/06/2012 16:52:14
Quote Anchor link
Het voordeel van zo'n container is dat je alle taken gescheiden houdt. Als je nu bijv. de exceptions niet wilt loggen, maar in de DB wilt zetten dan hoef je alleen op regel 4 'FileLog' te veranderen in 'DbLog'. Dan zal de rest gewoon doorwerken.
Of als je de locatie van het bestand wilt veranderen hoef je alleen regel 5 te veranderen.

Zo maak je je code beter aanpasbaar.

De ReflectionClass is een ingebouwde PHP klasse. Deze zorgt ervoor dat je klassen kunt aanmaken. In dit geval gebruik ik hem omdat je argumenten wilt meegeven aan de constructor (welk bestand, welke logger). Daarom maak ik een ReflectionClass aan met als argument de naam van de klasse (al eerder gedefinieerd) en vervolgens gebruik ik newInstanceArgs, welke de klasse aanmaakt met de argumenten die je opgeeft (in dit geval de array die ook al eerder is aangemaakt).

Edit:
Ik heb de code even bewerkt, waardoor je ook meteen het voordeel ziet van werken met interfaces. De reflectionclass gebruik ik nu ook om te controleren of ze wel een subklasse zijn van de Log of Handler interfaces.
Gewijzigd op 29/06/2012 16:57:02 door Wouter J
 
Write Down

Write Down

29/06/2012 17:18:50
Quote Anchor link
Bedankt voor de verhelderende uitleg! Echter maak ik hierbij (misschien onterecht) wat kanttekeningen. Als ik het principe min of meer begrijp, is dit erg gericht op de flexibiliteit van een applicatie evenals de herbruikbaarheid van (delen) van de applicatie.

Ik begrijp dat het handig is dat je simpelweg door op lijn 4 wat aan te passen dat dit erg eenvoudig werkt. Langs de andere kant, het is weer extra code, extra objecten, ... (extra werkruimte, opslag) Weegt deze flexibiliteit op den duur nog op tegen de performantie? Daar heb ik eerlijk gezegd mijn twijfels bij. Verder bedenk ik dan ook, als je dit toepast, dan dien je eigenlijk al een hele denkpiste af te leggen eer je werkelijk doet wat je wilt doen. Dan vraag ik me af, is het niet eenvoudiger om simpel DI te gebruiken (m.a.w. via contructoren/setters doorgeven wat nodig is)?

Ik denk eerlijk gezegd dat je dit niet -hoeft- te gebruiken, maar dat het wel kan. Komt het eigenlijk er niet op neer dat je voor jezelf een bepaald niveau van flexibiliteit vastlegt, en hier naar streeft?
 
Wouter J

Wouter J

29/06/2012 18:36:27
Quote Anchor link
Quote:
Weegt deze flexibiliteit op den duur nog op tegen de performantie?

Nee. Dat is echt micro-optimalisatie, als je kijkt naar websites die gemaakt zijn met een framework dan zijn er zo'n 100 objecten nodig voor een pagina aanroep. Dit is dus echt geen verschil.

Quote:
Verder bedenk ik dan ook, als je dit toepast, dan dien je eigenlijk al een hele denkpiste af te leggen eer je werkelijk doet wat je wilt doen. Dan vraag ik me af, is het niet eenvoudiger om simpel DI te gebruiken (m.a.w. via contructoren/setters doorgeven wat nodig is)?

En dat is nou net het verschil tussen Flat scripten en OO scripten. In OO moet je voordat je begint met scripten eerst alles al hebben uitgedacht. Pas als je alles hebt uitgedacht en hebt uitgetekend in UML diagrammen begin je met de code en je zult zien dat je dan maar heel kort of te programmeren, omdat je alles al hebt uitgedacht.
Bij Flat PHP begin je gewoon ergens en zie je wel waar het schip strand. En dat is dus niet de manier hoe programmeren werkt, volgens OO mensen.

Quote:
Ik denk eerlijk gezegd dat je dit niet -hoeft- te gebruiken, maar dat het wel kan. Komt het eigenlijk er niet op neer dat je voor jezelf een bepaald niveau van flexibiliteit vastlegt, en hier naar streeft?

OO is eigenlijk alleen maar kijken tot welk level je wilt. Wil je gaan tot een BlogPost klasse, of ga je ook een extra Author klasse erbij maken? Dat zijn vragen die je je zelf moet stellen.
Maar ik heb geleerd uit ervaring dat je beter teveel klassen kan hebben dan te weinig. Hoe beter je alles opsplitst hoe flexibeler het wordt en dat is nou net OO. OO is niet zo zeer het denken in objecten, OO is het flexibel maken van je code.
 
Write Down

Write Down

03/07/2012 11:53:31
Quote Anchor link
Ik heb (eindelijk) de tijd gevonden om dit topic nog eens geheel door te lezen.

Eerst en vooral ben ik het geheel eens met je reactie Wouter. Waar ik met mijn vorige post op doelde heb jij in jouw post kort en kracht gezegd: "OO is eigenlijk alleen maar kijken tot welk level je wilt."

De 'strategy pattern' begrijp ik geheel. Zonder de term te kennen heb ik dit in het verleden al toegepast. Niet in PHP maar in Java, maar goed dat maakt niets uit. Alleen ik zie niet in waarvoor jij dit zou gebruiken i.v.m. de gebruikerspermissies.

Misschien heeft er iemand wat aan, ik bekeek het artikel 'Strategy Design Pattern' en een filmpje in een of andere tutorialreeks: 'Strategy Pattern'

Misschien moet ik voor de zekerheid even kort toelichten welke 'mogelijkheden' ik zeker en vast wil gaan inbouwen. In eerste instantie wil ik een onderscheid kunnen maken tussen: bezoeker, 'geregistreerde zonder rechten', 'geregistreerde met rechten' Hiermee wil ik simpelweg bereiken, sommige pagina's kunnen door iedereen bekeken/gebruikt worden, anderen door ingelogde gebruikers en dan is er nog de admin sectie.

Als je er even mijn ERD bijhaalt en daar Groups aan toevoegt is dit makkelijk te verkrijgen. In de 'permissions table' een veld met die refereert naar de 'group table'. group 1 is bv. 'geregistreerde zonder rechten' en groep twee is logischerwijs 'geregistreerde met rechten'. Later zou ik dan willen uitbreiden met meer specifieke rechten, bv. een gebruiker mag een (andere) gebruiker verwijderen, bewerken, toevoegen, ... Dit zowel op 'group' niveau als op één specifieke gebruiker.

Ik zie echter niet in hoe ik dit op jouw manier / een andere efficiënte manier dit perfect kan bekomen. Op database niveau is dit geen enkel probleem:

Een gebruiker moet een record hebben in 'permissions' en optioneel is er een link naar een 'group'.

Ik hoop dat mijn vraag min of meer duidelijk is. Ik wil alvast iedereen bedanken, en in het bijzonder natuurlijk Wouter :-).
Gewijzigd op 03/07/2012 11:58:26 door Write Down
 
Wouter J

Wouter J

03/07/2012 13:48:16
Quote Anchor link
Hmm, aangezien de code wat groter werd dan verwacht heb ik het even gezipt, kijk er maar in en zoek eerst zelf wat op als je iets niet begrijpt en vraag het daarna anders hier. En het is nog niet getest, dus er kunnen fouten in zitten. Soms bestaan sommige dingen ook niet, dit is slechts de basis zodat jij het kunt begrijpen.

http://phphulp.wouterj.nl/usermanagement.zip
 
Write Down

Write Down

03/07/2012 14:13:02
Quote Anchor link
Wouter, bedankt! Inderdaad een duidelijk voorbeeld. Ik moet wel nog even uitzoeken hoe dat met die namespaces zit, nooit eerder gebruikt. Maar goed, dat lukt vast en zeker wel.

Toch nog een paar vragen. Een gebruiker logt in, wat is de beste manier om dan te bepalen wat voor een gebruiker hij is? Want met jouw voorbeeld, maak je dus voor een admin een ander object aan dan voor een user. Ik denk ook als deze vraag beantwoord is, dat mijn 2de vraag beantwoord zal zijn: wat is het nut van Guest, aangezien die toch geen rechten heeft.
 
Wouter J

Wouter J

03/07/2012 14:18:38
Quote Anchor link
Je logt de gebruiker in via een Authentication klasse of via de UserMapper. Deze zal dan uit de DB de gegevens halen van de user en deze in de User klasse zetten. Uit de DB haal je op wat de rechten zijn van een user.
Je zou dan gewoon alleen een User klasse kunnen hebben. Doormiddel van de set...Strategy kun je dan alle rechten instellen aan de hand van de data uit de DB.

En een Guest. Tja, soms moet je verplicht zijn om ergens in gelogd te zijn maar wil je je niet registreren, dan is er soms een Guest optie. Dan zit je in het Guest object, deze Guest heeft vaak een naam (Guest124) en zal dus ook een eigen object krijgen die bijv. deze naam vast houdt.

Namespaces zijn niet heel moeilijk. Misschien dat mijn uitleg hier wel helpt: http://www.phphulp.nl/php/forum/topic/oop-gedachtengang/85017/5/#609868 (al vind ik het een moeilijk uit te leggen onderwerp)
Gewijzigd op 03/07/2012 14:20:59 door Wouter J
 
Jeroen VD

Jeroen VD

03/07/2012 14:23:28
Quote Anchor link
euh, even inbreken.... wat wil je bereiken met de Permissions tabel?
 
Write Down

Write Down

03/07/2012 14:30:29
Quote Anchor link
Één User class lijkt me inderdaad handiger. Zeker omdat ik in de toekomst toe dit erg flexibel wil hebben. De beheerder van de applicatie moet de mogelijkheid hebben zelf te kiezen welke soort gebruikers er zijn. Neem nu als voorbeeld PHPhulp, dan kan je (bijvoorbeeld) volgende groepen onderscheiden: lid, moderator, redacteur, beheerder, ... . Neem je daarentegen bv. een portfolio dan zouden er bijvoorbeeld slechts twee groepen kunnen bestaan: klant en 'ik'. (In beide voorbeelden ga ik er vanuit dat een bezoeker [guest] geen rechten heeft.)

De enige vraag die mij dan rest...
Vroeger hield ik bv. de username, hash, ... bij (sessie) en keek ik op elke pagina na of de ingelogde recht heeft om de huidige pagina te bekijken. Indien ja: gebruiker kan alles doen wat er op die pagina mogelijk is. Indien nee: gebruiker krijgt melding dat hij onbevoegd is.

Aangezien de gegevens nu in een user object terecht komen, hoe geef je dit object dan door? Alles in een sessie gaan stoppen? (lijkt me niet dé oplossing) Of ga je op elke pagina na a.d.h.v. user_id is deze gebruiker gerechtigd (authenticatie)? Ja: maak user object; nee: niet gemachtigd (opnieuw inloggen / melding).

Toevoeging op 03/07/2012 14:32:21:

Jeroen vd op 03/07/2012 14:23:28:
euh, even inbreken.... wat wil je bereiken met de Permissions tabel?

Bijhouden wat een gebruiker / groep al dan niet mag?
 
Wouter J

Wouter J

03/07/2012 14:33:33
Quote Anchor link
Je moet het security model aanhouden:
http://symfony.com/doc/current/_images/security_anonymous_user_access.png
Eerst heb je de Authentication, je kijkt wie deze gebruiker is, of hij is ingelogd ect. Vervolgens doe je de Authorization die kijkt welke rechten je nodig hebt en welke rechten de Authentication heeft opgeleverd.
Gewijzigd op 03/07/2012 14:33:44 door Wouter J
 
Write Down

Write Down

03/07/2012 14:44:37
Quote Anchor link
Wouter, het model begrijp ik. Maar ik zie niet direct in hoe je dan de implementatie gaat verwezenlijken? Wat ge je dan bijhouden in je sessie?

In mijn vroegere applicaties liet ik inderdaad inloggen en keek ik op de beveiligde pagina: is de gebruiker wel nog dezelfde (IP veranderd, geprutst met parameters, ...)

Ga je in dit geval bij de 'authorization' nagaan wat ik hierboven beschrijf en telkens opnieuw de permissies opnieuw uit de database halen, user-object maken (set...Strategy), ...? Om daarna dan te bepalen: aha, dit mag dit niet?
 
Wouter J

Wouter J

03/07/2012 14:51:40
Quote Anchor link
Je zou ook het User object kunnen serializen en dan in een session plaatsen bij Authentication kijken of de session bestaat, deze vervolgens unserializen en dan bij Authorization kijken of je de rechten hebt.
 
Jeroen VD

Jeroen VD

03/07/2012 14:57:30
Quote Anchor link
Quote:
Bijhouden wat een gebruiker / groep al dan niet mag?

waarom in een aparte tabel? het lijkt mij dat een gebruiker maar 1 soort van controle heeft, hij kan geen admin en gast tegelijk zijn. zet in je usertabel een paar kolommen bij met de permisions, dit is namelijk uniek voor elke gebruiker, en nutteloos om daar dan een aparte tabel voor aan te maken (zie het als een wachtwoord - die zet je toch ook niet in een aparte tabel?)
 
Write Down

Write Down

03/07/2012 15:25:19
Quote Anchor link
@Jeroen

Daar ben ik het niet mee eens. Waarom zou je het niet splitsen? Dit verhoogt naar mijn mening de flexibiliteit. Stel morgen maak ik een applicatie die maar een paar permissie instellingen kent. Overmorgen maak ik een totaal andere applicatie met meer complexe permissies. De 'functie' gebruiker is in beide applicaties hetzelfde, de permissies niet.

Verder is er dan ook nog het indelen van groepen, dit is makkelijker met een aparte tabel voor permissies. Overigens heb je vaak de permissies niet nodig, gewoon zuiver gebruikersnaam en dergelijke. Dan is je query sneller afgehandeld, aangezien er minder werk is. Langs de andere kant, als je permissies nodig hebt, heb je een extra tabel nodig. Echter is het zo dat als je op de juiste wijze JOINS gebruikt dit erg efficiënt werkt.

@Wouter
Lijkt me een goed plan. Volgens mij is het dan het handigste om in de User class een serialize en deserialize functie te voorzien? Of eventueel eerst in een interface stoppen, zodanig dat andere objecten op dezelfde manier geserialiseerd kunnen worden.
 

Pagina: 1 2 3 4 5 volgende »



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.