Vraag ivm authenticatie

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Embedded Developer C++

Functie omschrijving Ben jij op zoek naar een leuke uitdaging als Embedded Developer, zoek dan niet verder! Voor een leuke opdrachtgever in omgeving Rotterdam zijn wij op zoek naar een Embedded Developer die graag met Embedded Devices werkt. Je zult verantwoordelijk worden voor het ontwikkelen en onderhouden van diverse producten. Jouw specialisatie ligt op het vlak van software, hardware en back-end. Dit bedrijf is gespecialiseerd in het ontwerpen van software voor een unieke industrie. Wil jij betrokken worden bij een proces dat loopt van ontwikkeling tot installatie? Waarbij je bezig zult zijn met perfecte systemen die geleverd worden aan binnen

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 »

PHP Developer

As a PHP Developer at Coolblue, you ensure that our webshops work as optimal as possible. How do I become a PHP Developer at Coolblue? As a PHP Developer you work together with other development teams to make our webshop work as optimal as possible and to make our customers happy. Although you are a PHP Developer, you are not averse to a little TypeScript or other technologies that might be used. Would you also like to become a PHP Developer at Coolblue? Read below if the job suits you. You enjoy doing this Writing vanilla PHP code. Working with

Bekijk vacature »

.NET Developer

Dit ga je doen Binnen het team bouw je aan een applicatie met andere .Net Developers, testers een Product Owner en een Business Analyst. Met het team wordt de backlog besproken. In overleg claim jij jouw deel en zorgt ervoor dat onderhoud en innovatie wordt gerealiseerd. Het project dat momenteel draait is het opgraden van de omgeving. Doorontwikkelen van de huidige applicatie; Overleggen met teamleden om de backlog te verdelen; Onderhouden van de huidige omgeving; Sparren met de business en het ophalen van nieuwe requirements. Hier ga je werken De organisatie is een van de grootste landelijke aanbieder van diverse

Bekijk vacature »

Full stack .NET developer Microsoft 365

Wat ga je doen als Full stack .NET developer Microsoft 365? Je stelt je op als sparringpartner voor het team en PO over toekomstige functionaliteiten, architectuur en mogelijke nieuwe producten. Je bent mede-verantwoordelijk voor het vertalen en omzetten van een user story in een passend technisch design. Je implementeert functionaliteiten op basis van een technisch design en user story. Je bent mede-verantwoordelijk voor het beheer van Azure DevOps, waaronder het beheer van GIT, Build Pipelines, Release Pipelines en geautomatiseerde testen. Hier herken jij jezelf in Hbo werk- en denkniveau of hoger aangevuld met relevante certificeringen en/of cursussen; Minimaal 3 jaar

Bekijk vacature »

Laravel / PHP developer gezocht!

Functie omschrijving Wij zijn op zoek naar een Laravel PHP Developer voor een leuk bedrijf in de omgeving van Amsterdam! Je zult je bezig houden met de volgende werkzaamheden: Je gaat aan de hand van de wensen van klanten software ontwikkelen; Je bent bij het gehele proces betrokken; van A tot Z; Je hebt na de oplevering contact met de klant wanneer zij problemen ervaren; Je denkt mee over het verbeteren van de werkprocessen; Je denkt mee over softwareoplossingen; Je speelt in op de behoefte van de klant; Je houdt je bezig met het verbeteren, aanpassen en vernieuwen van de

Bekijk vacature »

C# .NET Developer

Functieomschrijving Voor dit leuke softwarre bedrijf in de omgeving Vught zijn we per direct op zoek naar een C#/.NET Developer. Is development jouw passie en doe je dit graag met C#/.NET? Lees dan snel verder! Jou werkzaamheden zullen zijn: Zorgen voor de optimalisatie van de huidige software en het automatiseren van bedrijfsprocessen. Naar aanleiding van de wensen van de klant ga je, met je collega's op zoel naar passende oplossingen en je werkt dit uit tot een mooi eindproduct. Je gaat webshops, websites en webapplicaties ontwikkelen door middel van ASP.NET, C# en MVC Framework. Bedrijfsprofiel Deze opdrachtgever houdt zich bezig

Bekijk vacature »

Integratie expert - Java Developer

Dit ga je doen Nieuw koppelingen ontwerpen, ontwikkelen en implementeren; Je schakelt met de klanten om hen zo goed mogelijk van dienst te zijn. Strategisch kijken naar nieuwe mogelijkheden op bestaande of nieuwe koppelingen zo effectief mogelijk te realiseren; Je bestaande toolset afwegen tegen nieuwe mogelijkheden om integratiedoelen steeds effectiever en/of effcienter te bewerkstelligen; Bestaande software koppelingen beheren, dit zijn koppelingen met zowel interne als externe systemen; Overleg met zowel directe collega's als met stakeholders om nieuwe integratieplannen concreet te maken; Je kunt de junioren meenemen op sleeptouw. Hier ga je werken Onze klant is op zoek naar een ervaren

Bekijk vacature »

Functioneel applicatiebeheerder - SOP-SYS-SAM

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 Functioneel Applicatiebeheerder voor het financiele domein op onze locatie Arnhem die hieraan wil bijdragen en misschien ben jij dat wel? Jouw bijdrage aan TenneT Je gaat samenwerken in een team van circa 15 functioneel applicatiebeheerders en gaat onderdeel uitmaken van een DevOps team. Met dit team ga je applicaties (laten) ontwikkelen en beheren. Hierbij concentreer je je vooral op

Bekijk vacature »

C# Developer

Dit ga je doen Je gaat aan de slag in het websites team of portals team waarin je je bezighoudt met concept & design, implementatie en ook een stukje bugfixing en onderhoud; Je werkt met je team volgens de Scrum werkwijze; Zo adviseer je ook de PO & Scrum Master over de technische architectuur, koppelingen en integratie met externe systemen en API’s; Je blijft op de hoogte van de laatste ontwikkelingen en trends op het gebied van C# / .NET en deelt deze kennis binnen de organisatie. Hier ga je werken Onze klant is een internationale organisatie gevestigd in de

Bekijk vacature »

Medior PHP Developer

Functie omschrijving Ben jij een getalenteerde PHP Developer en aan de slag in een gemotiveerd team? Lees dan snel verder! Voor onze opdrachtgever in de omgeving van Valkenswaard zijn we op zoek naar een ervaren PHP developer. Jij gaat hier zorg dragen voor het optimaliseren en up-to-date houden van de bestaande applicaties. Je werkt verder aan de applicaties die jij verder ontwikkelt. Dit doe je voornamelijk met PHP en MySQL. Verder ga je je bezig houden met: Het uitbouwen van het E-commerce software platform. Deelnemen aan overleggen met het team. Het ondersteunen van jouw team developers (3 man) en helpen

Bekijk vacature »

Software Developer

Dit ga je doen Je bent verantwoordelijk voor de warehouse applicatie die een integratie heeft met de PLC laag; Je ontwikkelt in C#/.Net; Je bent verantwoordelijk voor het ontwikkelen van interfaces en het visualiseren van componenten; Je denkt mee over het design voor business oplossingen; Je bent verantwoordelijk voor het testen van de gebouwde oplossing. Hier ga je werken Voor een internationale organisatie in de transport zijn wij momenteel op zoek naar een Software Developer. Ze zijn wereldwijd de grootste speler en lopen voorop met het automatiseren van alle processen van de warehouses. Op dit moment wordt er nog gebruik

Bekijk vacature »

Robot Programmeur

In het kort Drie redenen waarom deze vacature uniek is! Programmeren van zelflerende robots Werken op kantoor en testen in de bedrijfshal Je krijgt verantwoordelijkheid, vrijheid en je mag werken naar eigen inzicht De organisatie Hier ga je aan de slag Een bedrijf dat innovatieve robottoepassingen ontwerpt en bouwt voor onder andere de staal industrie, energie- bouw- en agrarische sector. De robots die vaak in combinatie met diverse randapparatuur geleverd worden vormen een totaaloplossing voor de klant. Dit zijn klanten over de hele wereld, van België en Duitsland tot China, India, maar ook in Nederland. Projecten waar momenteel aan wordt

Bekijk vacature »

Traineeship Full Stack .NET Developer

Dit ga je doen Start op 7 augustus 2023 bij de Experis Academy en ontwikkel jezelf tot een gewilde Full Stack .NET Developer. Maar hoe ziet het traineeship eruit en wat kun je verwachten? Periode 1 De eerste 3 maanden volg je fulltime, vanuit huis, een op maat gemaakte training in teamverband. Je leert belangrijke theorie en krijgt kennis van de benodigde vaardigheden en competenties die nodig zijn om de IT-arbeidsmarkt te betreden. Zowel zelfstandig als in teamverband voer je praktijkopdrachten op het gebied van front- en backend development uit. Wat er per week op het programma staat kun je

Bekijk vacature »

.Net Ontwikkelaar

Dit ga je doen Het ontwerpen en ontwikkelen van software voor klanten; Het bijdragen van kennis en ervaring; Het integreren van van de software en afstemmen met klanten; Het functioneel testen van de ontwikkelde software. Hier ga je werken Voor onze relatie zijn wij momenteel op zoek naar een .Net Developer die wilt werken aan software die draait op machines wereldwijd. De organisatie produceert software voor applicaties die gebruikt worden in verschillende branches. De software wordt geleverd aan fabrikanten van verschillende robotica en machines. Als .Net ontwikkelaar ben je intern onderdeel van het team wat de applicatie omgevingen ontwikkeld 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

11/01/2025 21:02:16
 
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.