Vraag ivm authenticatie

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Back end developer PHP

Functie Met een complex en uitgebreid e-commerce platform, een eigen PIM-systeem en eigen scan applicatie – krijg jij dagelijks te zien hoe jouw werk gebruikt wordt door miljoenen gebruikers. En we staan qua development pas in de startblokken, aangezien er nog meerdere projecten op de plank liggen te wachten! Ons huidige development team bestaat uit 8 programmeurs. Er wordt dagelijks gereflecteerd op geschreven code, Scrum taken en kennisdelen onderling is een must. Onze voertaal binnen ons team is Engels, dit omdat wij twee internationale collega’s hebben. Ons huidige “IT Landschap” bestaat voornamelijk uit allerlei losse onderdelen die individueel, maar ook

Bekijk vacature »

Softwareontwikkelaar Cleopatra

Functieomschrijving: De directie Verkeer en Openbare ruimte van de gemeente Amsterdam beschikt over een softwareapplicatie, "Cleopatra", waarmee geautomatiseerde handhaving plaatsvindt (op basis van kentekenherkenning) van bepaalde gebieden waarin toegangseisen worden gesteld aan het verkeer. Voorbeelden ervan zijn de milieuzones, de zone zwaar verkeer, handhaving van bromen snorfietser op het fietspad en autoluwe gebieden. Voor de doorontwikkeling en uitbreiding ervan zijn gespecialiseerde softwareontwikkelaars nodig die helpen bij het programmeren van de handhavingsmodules voor nieuwe gebieden en het verbeteren en bijwerken van de bestaande onderdelen van de softwareapplicatie.De opdracht bestaat uit: het programmeren van de diverse modules;het tijdens demo's tonen van de

Bekijk vacature »

Back-end PHP Software Developer - Juniorfunctie

Functieomschrijving Wij zijn op zoek naar een PHP Software Developer om ons team te versterken en mee te werken aan de ontwikkeling van eigen IOT-oplossingen. In deze functie ben je verantwoordelijk voor het bouwen van webapplicaties, apps en dashboards voor het uitlezen en managen van sensoren in machines. Je werkt nauw samen met een team van ontwikkelaars en engineers om de beste software-oplossingen te creëren. Jouw werkzaamheden zien er als volgt uit: Je bent in deze rol verantwoordelijk voor het ontwerpen, ontwikkelen en onderhouden van webapplicaties en softwaretoepassingen voor in-house ontwikkelde IOT oplossingen. Je werkt aan complexe databases en back-end

Bekijk vacature »

Frontend Developer

Functieomschrijving Voor de NIPV zijn wij opzoek naar een Frontend Developer. Als Frontend Developer ga jij aan de slag om dashboards te bouwen vanuit het datawarehouse. Dit stelt NIPV in staat om snel en eenvoudig bij correcte bedrijfsvoeringsinformatie te kunnen. Je ontwikkelt dashboards in PowerBI, publiceert en onderhoud die, verzameld en verwerkt feedback in overleg met het ontwikkelteam. Naast dashboards ontwikkel en onderhoud je een datamodel in Excel waarmee adviseurs, controllers en analisten in staat worden gesteld om de gegevens uit de dashboards te raadplegen en anders te filteren of bepaalde gegevens nader te verfijnen, zodat verdiepende vragen kunnen worden

Bekijk vacature »

PHP ontwikkelaar

Functie Met een complex en uitgebreid e-commerce platform, een eigen PIM-systeem en eigen scan applicatie – krijg jij dagelijks te zien hoe jouw werk gebruikt wordt door miljoenen gebruikers. En we staan qua development pas in de startblokken, aangezien er nog meerdere projecten op de plank liggen te wachten! Ons huidige development team bestaat uit 8 programmeurs. Er wordt dagelijks gereflecteerd op geschreven code, Scrum taken en kennisdelen onderling is een must. Onze voertaal binnen ons team is Engels, dit omdat wij twee internationale collega’s hebben. Ons huidige “IT Landschap” bestaat voornamelijk uit allerlei losse onderdelen die individueel, maar ook

Bekijk vacature »

Junior .NET Developer

Dit ga je doen Als junior .NET Developer lever je met jouw oplossingen direct een bijdrage aan de bedrijfsprocessen van de klanten. Werkzaamheden waar jij je zoal mee bezig houdt zijn; Het ontwikkelen, onderhouden en optimaliseren van de draaiende platforms van de klanten; Softwareontwikkeling middels C#, .NET; Klantcontact om de wensen te bespreken en uit te werken; Optimaliseren van de (huidige) bedrijfsprocessen; De IT-afdeling bestaat uit 30 personen verdeeld over 3 teams. Het team waar je in terecht komt bestaat uit ongeveer tien man. Het is een team wat bestaat uit betrokken collega’s, waar iedereen bereidt is om elkaar te

Bekijk vacature »

Front-end Developer

Gezellige team, passie en een groene toekomst! Lees hier de vacature van Front-end Developer bij All in Power! All in power heeft zich tot doel gesteld écht bij te dragen aan de energietransitie. Dit doen wij door de markt voor energie volledig op zijn kop te zetten. Producenten van schone (wind- of zonne-)energie verkopen via ons platform hun energie rechtstreeks aan gebruikers. Of dit nu huishoudens, bedrijven of bijvoorbeeld laadpalen zijn ons platform maakt het uitwisselen van energie mogelijk. Zo maken we de business case van onze klanten veel sterker en loont het om (meer) te investeren in vergroening voor

Bekijk vacature »

PHP Web Developer

Functie omschrijving Voor een klein softwarebedrijf in de omgeving Roosendaal, zijn wij op zoek naar een PHP web developer met een aantal jaar werkervaring. Wil jij graag werken aan in-house software projecten voor diverse klanten? Voel jij je prettige in een klein team developers, waar jouw inbreng enorm gewaardeerd wordt? Lees dan snel verder! Jouw werkzaamheden zien er als volgt uit: Je wordt verantwoordelijk voor de ontwikkeling van diverse applicaties. Dit kan de ene keer een online platform voor aanbiedingen zijn, en de andere keer een software pakket dat gebruikt wordt om interne processen te automatiseren. Het zijn stuk voor

Bekijk vacature »

C# developer

Functie Als C# ontwikkelaar ben jij de spin in het web bij deze organisatie. Jij begeleidt en traint de field engineers die bij de klanten machines leveren en installeren. Daarnaast ondersteun jij de field engineers als zij bij de klant vastlopen bij het installeren van de machine m.b.t. software matige vragen. Jouw doel is dan ook om de technische kennis van de field engineers door middel van training zoveel mogelijk uit te breiden. Dit om ervoor te zorgen dat zij zelfstandiger software matige problemen kunnen oplossen. Ook ben jij verantwoordelijk voor het bedenken van software oplossingen voor klanten en dit

Bekijk vacature »

Als Lead PHP developer bijdragen aan het onderwijs

Functie Als Lead PHP developer zet je samen met het team en de andere lead developers de technische lijnen uit als het gaat om het ontwikkelen van de applicaties en bepaal je samen met de PO waar elke sprint aan gewerkt zal worden. Je kunt op basis van een user story een goede aanpak formuleren en een planning opstellen, en andere hierin meenemen. Wanneer je team code schrijft verwacht je degelijke oplossingen, bij voorkeur gebruik makend van Domain Driven Design. Je ziet toegevoegde waarde in het beoordelen van het werk van collega’s om zo samen te streven naar hoge kwaliteit

Bekijk vacature »

PHP ontwikkelaar

Functie Jij komt te werken in een development team van 9 man. Het grootste deel doet back end development en daarnaast is er 1 teamlead en 1 tester in het team. Dit Agile team is van groots belang voor de organisatie omdat zij voornamelijk alle eigen systemen in-house ontwikkelen. Naast het door ontwikkelen van het bestaande platform en de software die daarbij komt kijken, zul jij je ook bezighouden met het realiseren en opzetten van nieuwe projecten binnen het bedrijf. Je staat nauw met de klant in contact om zo hun wensen zo goed mogelijk te kunnen realiseren. Daarnaast ontwikkel

Bekijk vacature »

Java Full Stack Developer

Java Full Stack developer What makes Cognizant a unique place to work? The combination of rapid growth and an international and innovative environment! This is creating a lot of opportunities for people like YOU — people with an entrepreneurial spirit who want to make a difference in this world. At Cognizant, together with your colleagues from all around the world, you will collaborate on creating solutions for the world's leading companies and help them become more flexible, more innovative and successful. And this is your chance to be part of the success story: we are looking for a (Senior) Java

Bekijk vacature »

Back-end Developer (Permanent position with the em

Bedrijfsomschrijving Dutch specialist in technical installation materials. Functieomschrijving Purpose of the position: Our client is looking for a Back-end Developer who, together with the rest of the energetic and dynamic team, is responsible for the development and management of the website. This not only concerns the development and management of the current website, but also the development of a new Headless Commerce Platform to keep the customer's website Future proof. Within the IT department, there is a real DevOps culture and the commerce team is at the forefront and tries to implement continuous improvements. Most important tasks: ï‚· Designing and

Bekijk vacature »

C#.NET Developer Jr. Functie

Functie omschrijving Bouw jij graag aan applicaties om processen in distributiecentra te optimaliseren? Wij zijn op zoek naar een C#.NET ontwikkelaar in regio Breda die hier graag een steentje aan bijdraagt! Jouw werkzaamheden zullen er als volgt uitzien: Je krijgt veel vrijheid in de keuze van de technieken die je gaat gebruiken. Uiteraard wel binnen de gestelde kaders, en door gebruik te maken van het .NET platform. Je gaat aan de slag met de ontwikkeling van een nieuwe module binnen de WMS suite van dit bedrijf. Deze "carrier" module gaat er voor zorgen dat de selectie van een vervoerder volledig

Bekijk vacature »

Software Developer .NET

Functie omschrijving .NET developer gezocht! Wij zoek op zoek naar een .NET Developer die zich niet uit het veld laat slaan voor een software bedrijf in de regio Veenendaal. Je gaat in deze functie aan de slag met het door ontwikkelen van bestaande producten en het ontwikkelen van nieuwe producten. Dit bedrijf ontwikkeld SaaS applicaties die zowel intern als extern gebruikt worden. Verder bestaat je functie uit: Het ontwikkelen en bouwen van webapplicatie, mobiele applicaties en websites vallen onder jouw verantwoordelijkheden; Werken met onder andere .NET, C#, HTML/CSS, Javascript en MSSQL/Oracle Databases; Hierin werk je samen met andere developers en

Bekijk vacature »
Sjoerd

Sjoerd

23/07/2008 09:28:00
Quote Anchor link
Mijn website vordert erg goed (de basis) en ben nu de authenticatie aan het implementeren, eerst een stukje hoe alles in elkaar zit:

classes:
authentication.class.php
current_user.class.php (static) (extends users model)

models:
users.mdl.php

Nu in de database heb ik een 20 tal acties bv (VIEW_NEWS_ITEM, DELETE_NEWS_ITEM, VIEW_ADMIN_PANEL,...)

Het idee is nu om (wanneer de gebruiker inlogd) al deze acties in een session 'rights' te steken dus tijdens het inloggen (stukje uit autentication.class.php:

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
<?php
public function login($p_oUser) {
        // Check attempts
        if ($this -> checkAttempts()) {
            // Only active users can login
            $user = $p_oUser;
            $user -> password = md5($user -> password);
            $user -> active = 1;
            // Try to get an user with this parameters
            $user -> getData();
            if (!empty($user -> id)) {
                // An user with this username and password exists
                $_SESSION['userID'] = $user -> id;
                $_SESSION['ip'] = $this -> getIP();
                $_SESSION['attempts'] = 0;
                $_SESSION['rights'] = HIER MOET DE SESSIE GEVULD WORDEN
                return true;
            }
        }
else {
            return false;
        }
    }

?>


Is het nu 'conform' en goed om op de plek van $_SESSION['rights'] = iets te doen als $this->setRights (waarbij ik voor de specifieke user alle rechten/acties uit de db haal en deze return als array), of moet dit toch ergens anders komen?

En moet ik wel met een sessie werken of kan ik beter dit alles in een static array steken?


Excuses voor de mogelijk onduidelijke post, ik heb geprobeerd alles zo goed mogelijk te verwoorden en uit te leggen.
 
PHP hulp

PHP hulp

17/11/2024 16:59:11
 
Jelmer -

Jelmer -

23/07/2008 22:46:00
Quote Anchor link
Ik zou gewoon de instantie van je User-model die voor de huidige ingelogde user geldt in een sessie stoppen , en via __sleep && __wakeup ervoor zorgen dat deze in de sessie alleen het id opslaat, en de rest uit de database haalt. Zo worden veranderingen aan het user-model in de db direct in de sessie doorgevoerd, en in mindere mate zodat je moeilijk kan klooien met een sessie. (Een sessie staat standaard immers in de /tmp map van je server, en deze deelt hij met alle andere sites die op die server gehost worden. Als een van deze sites goed lek is, kunnen de sessies van al deze sites op de server gelezen en misschien ook wel geschreven worden.)

Dan kom je dus op 3 losstaande onderdelen uit:
De Auth-service. Hier zou ik inderdaad een static klasse van maken (of Singleton, heeft persoonlijk mijn voorkeur) en deze, en alleen deze praat met $_SESSION['current_user']. Deze doet ook het inloggen en houdt dingen als ip en attempts bij.

Je User-model waarvan je er ook eentje hebt voor de current user. De Auth-service geeft deze terug als je hem daar opvraagt, zodat je gebruikersnaam en echte naam, emailadres en dat soort info van de huidige gebruiker kan opvragen zoals je dat ook voor alle andere gebruikers doet.

En je User-model heeft ook een 'rights' property. Als je hier een getter van maakt (een functie/method) dan kan je hem zo maken dat hij op dat moment een object aanmaakt waarmee je kan controleren of die gebruiker (waarvan je de rights opvraagt) ook een bepaalde actie mag uitvoeren.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$auth_service
= AuthentificationService::sharedInstance();

$current_user = $auth_service->current_user();

$rights_of_current_user = $current_user->rights();

$rights_of_current_user->grant()

$rights_of_current_user->provoke()
?>


Ik zou voor de rechten de database gebruiken (en voor een wat uitgebreidere site is het handig om met rollen te werken, en niet met individuele personen en rechten, misschien is het de moeite waard daar eens naar te kijken) Blijkt achteraf dat je teveel queries draait per request voor de rechten, dan kan je gaan kijken naar een cache of een andere methode. Dat moet niet lastig zijn met deze opbouw. Alleen de klasse waarvan je een instantie bij User::rights() teruggeeft hoef je te veranderen.
 
Sjoerd

Sjoerd

24/07/2008 17:03:00
Quote Anchor link
Allereerst bedankt dat je de tijd en moeite hebt genomen om zo'n uitgebreid antwoord neer te schrijven!
Ik zit echter nog met een paar vraagjes:

Jelmer schreef op 23.07.2008 22:46:
Ik zou gewoon de instantie van je User-model die voor de huidige ingelogde user geldt in een sessie stoppen , en via __sleep && __wakeup ervoor zorgen dat deze in de sessie alleen het id opslaat, en de rest uit de database haalt.

Zou je het bovenstaande nog iets verder kunnen verduidelijken ivm een simpel voorbeeldje? Stop je nu enkel de id van de actieve user in een sessie en doe je dan iets als
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
$user = new users();
$user -> id = $_SESSION['id'];
$user -> getData();

Waardoor je object verder gevult wordt?


Jelmer schreef op 23.07.2008 22:46:
Je User-model waarvan je er ook eentje hebt voor de current user. De Auth-service geeft deze terug als je hem daar opvraagt, zodat je gebruikersnaam en echte naam, emailadres en dat soort info van de huidige gebruiker kan opvragen zoals je dat ook voor alle andere gebruikers doet.

Ik zat hier achteraf nog over na te denken, maar waarom een aparte model voor de current user? deze is toch eigenlijk exact hetzelfde als de gewone 'user.mdl.php'? Zeker als hij niets met sessies te maken heeft, sorry als ik het niet helemaal door heb nu ;)[/quote]
 
Jelmer -

Jelmer -

24/07/2008 17:34:00
Quote Anchor link
Een voorbeeldje van __sleep & __wakeup:
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
<?php
class User {

    protected $id;
    
    protected $name;
    
    protected $email;
    
    public function __sleep() {
        // een lijst met namen van properties
        // die opgeslagen moeten worden.

        return array('id');
    }

    
    public function __wakeup() {
        // Alle opgeslagen properties zijn nu al
        // weer ingevuld, in ons geval is dat
        // alleen User::id.
        
        // zoals jij het doet. $this->id is nu
        // dus al ingevuld.

        $this->getDate();
    }

}

?>


Je current-user is inderdaad hetzelfde als een normale user, dus daar heb je geen apart model voor nodig volgens mij. Die eerste zin had moeten zijn: "Je User-model waarvan je er ook een instantie hebt voor de current user."
 
Sjoerd

Sjoerd

24/07/2008 18:40:00
Quote Anchor link
Ik probeer nu alles uit te werken, bedankt voor het voorbeeld, dit heb ik al succesvol weten te implementeren en zie nu ook het voordeel ervan ;)

Waarom prefereer je singleton over static voor de authenticatie klasse?
 
Jelmer -

Jelmer -

24/07/2008 18:43:00
Quote Anchor link
Puur uit gewoonte, heeft niet echt een specifieke reden.

Ik vind static methods een beetje aanvoelen als losse functies. Een instantie voelt meer aan alsof het een bepaalde 'state' heeft, wat het geval is bij de authenticatie klasse.
 
Sjoerd

Sjoerd

25/07/2008 09:06:00
Quote Anchor link
Toch nog weer een vraag, heb denk ik het hele systeem al weer een paar keer herschreven maar nog altijd niet naar mijn zin.

Zoals het nu is:
users.mdl.php
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
private static rights;

/**
    * rights
    *
    * fill our private var and return the var
    * @acces public
    * @return void
    */

    public function rights() {
        $this->p_oRights = new rights($this);
        return $this->p_oRights;
    }

?>


dan een klasse rights.class.php (moet deze code in auth class?)

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
<?php
class rights{

    private $m_aRights;
    private $m_oUser;

    public function __construct($p_oUser) {
        $this->m_oUser = $p_oUser;
    }


    /**
    * isAuthorized, check if the user is authorized or not
    * @acces public
    * @return true if authorized, false if not
    */

    public function isAuthorized($p_sAction) {
        $this->fill();
        
        if(!empty($this->m_aRights)){
            if (array_key_exists($p_sAction, $this->m_aRights)) {
                return "ja";
            }
else {
                return 'nee';
            }
        }
    }

    
    private function fill() {
        // Get rights for the user given as parameter
        $sSQL = 'SELECT a.title
                FROM actionpermissions ap join actions a
                ON ap.actionID = a.id
                WHERE ap.groupID = "'
. $this->m_oUser -> groupID . '"';
                
        $results = array();
        $aRows=registry::get('db')->query($sSQL);
            
        // Make an aResult array
        foreach ($aRows as $row) {
            $results[] = $row;
        }

        if ($results) {
            $numberOfResults = count($results);                
            for ($i=0;$i<$numberOfResults;$i++) {
                $this->m_aRights[$results[$i]['title']] = true;
            }
        }

        return $this->m_aRights;
    }
}

?>


De rest (zoals het opvragen van de currentuser aan de auth class) is allemaal goed uitgewerkt en werkt naar mijn zin.

Execuses voor de lap code, het probleem is dus niet dat het niet werkt (want dat doet het wel) maar het probleem is meer of deze opzet goed is... of dat ik beter bv aan de auth class de current user kan opvragen.

Bedankt alvast voor alle moeite om er naar te kijken
in de functie fill maak ik dus een array als array('VIEW_ADMIN_PANEL', 'EDIT_ARTICLE',....);
 
Jelmer -

Jelmer -

25/07/2008 09:31:00
Quote Anchor link
Ik zou het op deze manier doen omdat in mijn ogen de rechten die een gebruiker heeft een eigenschap van die gebruiker is.

Zend bijvoorbeeld heeft een soort van 'autoriteit', Zend_Acl, waarvan je 1 instantie hebt die je wss weer via je register vraagt of gebruiker a actie b mag doen. Zij hebben van de rechten dus een op zichzelf staand iets gemaakt. Voor een all-purpuse framework is dat wel een goeie aanpak, maar voor een eigen site, waarvan je zeker weet dat gebruikers rechten nodig hebben zou ik het op deze manier zoals jij het nu hebt gedaan doen.

Overigens zou ik binnen isAuthorized gewoon true of false teruggeven. Er is geen specifieke reden waarom je "ja" of "nee" teruggeeft neem ik aan?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
if($current_user->isAuthorized('VIEW_ADMIN') == 'Ja')
// of
if($current_user->isAuthorized('VIEW_ADMIN'))

// voor de flow zou je hem eventueel nog zo kunnen noemen
if($current_user->isAuthorizedTo('view_admin')) { /* doe dit */ } else { /* doe dat */ }
?>


Je code kan nog wat korter. Je loopt nu 3 maal door je query-results array. Een maal is toch genoeg?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
foreach ($aRows as $row) {
    $this->m_aRights[$row['title']] = true
}
?>

Ook zou ik fill() niet een return-value laten geven. Of de state van de instantie aanpassen (properties vullen) of een resultaat teruggeven. Niet beiden tegelijk. Op die manier kan je gemakkelijk onderscheidt maken tussen destructieve en non-destructieve functies. Destructieve functies veranderen het object (en kan je vaak niet terugdraaien) en non-destructieve functies geven alleen een (berekende) waarde maar veranderen niets aan de state van het oorspronkelijke object. Het is ook weer zo'n persoonlijke voorkeur maar door de tijd heeft hij bij mij zich nuttig bevonden :)
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 
Sjoerd

Sjoerd

25/07/2008 09:38:00
Quote Anchor link
Jelmer schreef op 25.07.2008 09:31:
Overigens zou ik binnen isAuthorized gewoon true of false teruggeven. Er is geen specifieke reden waarom je "ja" of "nee" teruggeeft neem ik aan?

Was meer als testje op dat moment, uiteindelijk wordt het natuurlijk geen ja, nee getrek :)

De foreach zal ik even implementeren idd, meestal vind ik tijdens het beta coden een for loop logischer (afwijking van vroeger vermoed ik)

Jelmer schreef op 25.07.2008 09:31:
Het is ook weer zo'n persoonlijke voorkeur maar door de tijd heeft hij bij mij zich nuttig bevonden :)


Dan zal ik dat maar aanhouden, scheelt mij weer een (vervelende) ervaring in de toekomst ;)

edit: bedankt voor alles! Alles werkt nu naar mijn zin!
Gewijzigd op 01/01/1970 01:00:00 door Sjoerd
 



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.