Queries mbt rechtensysteem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mendix Developer

Functie Wat ga je doen als Mendix Developer? We leven in een wereld die snel ontwikkelt en veranderd, ook nemen bedrijfsbelangen toe en blijken risico’s moeilijker in te schatten, daarom wij op zoek naar Junior, Medior en Senior Developers die bedrijven kunnen helpen met hun screeningproces en zorgen dat deze efficiënt en 100 procent AVG compliant is. Het concept achter Mendix is duidelijk. De klant heeft een vraag/probleem. Dit kunnen we door middel van slimme software oplossen. In plaats van te werken met de nieuwste technieken en tools, wordt er gekozen voor het implementeren en maken van software dat op

Bekijk vacature »

Software developer - C Sharp

Functie omschrijving Voor een opdrachtgever, met een prachtig kantoor in omgeving Wateringen zijn wij op zoek naar een software ontwikkelaar die graag werkt met C#, JAVA of Oracle. Heb jij interesse in het programmeren en ontwikkelen van software? En heb jij enige ervaring met Oracle databases en PL/SQL? Als software developer werk je met je collega's samen in een leuk en informeel team aan het (her)ontwerpen van bedrijfssystemen. Je houdt je bezig met het ontwikkelen van REST API's en je onderhoudt applicaties in Oracle PL/SQL en APEX. Vind jij het leuk om in een Agile/Scrum omgeving te werken? Wil jij

Bekijk vacature »

Software Developer / .NET / Azure

Dit ga je doen Als Lead .NET Software Developer zal je je bezig houden met: Het vertalen van bedrijfswensen naar een technische roadmap; Uitwerken van nieuwe architectuur / designs; Het team aansturen en motiveren; Toezien op de kwaliteit van de code; Mee ontwikkelen van nieuwe features en applicaties. Hier ga je werken Deze organisatie is op dit momenteel marktleider in het ontwikkelen van productielijnen voor de voedselindustrie en heeft een wereldwijd klantnetwerk. Binnen deze organisatie is het team van software developers dagelijks bezig met het ontwikkelen van maatwerk oplossingen om alle productiemachines aan te sturen, maar ook bedrijf kritische applicaties

Bekijk vacature »

.NET Developer Medior Senior

Dit ga je doen Ontwikkelprocessen verder optimaliseren en verder ontwikkelen met C#; CI/CD-pipelines automatiseren; Herbruikbare componenten maken; Testen; Front-end pagina's gebruiksvriendelijk maken. Hier ga je werken Als .NET Developer kom jij terecht binnen een grote en internationale organisatie. Zij streven naar een positieve impact op de mens, milieu en maatschappij. Het bedrijf is oorspronkelijk een familiebedrijf en werkt aan de productie van hoogwaardige en technische systemen voor de gezondheidszorg. Momenteel willen zij betere ontwikkelprocessen creëren op internationaal gebied en staat kwaliteit en veiligheid voor hun op nummer 1! Als .NET Developer werk jij aan het ontwikkelen van verbeterde software voor

Bekijk vacature »

Database Developer

Functie omschrijving Voor een logistieke dienstverlener in omgeving Zuid Beijerland zijn wij op zoek naar versterking. Weet jij als geen ander systemen aan elkaar te koppelen en heb jij goede kennis van SQL en UML, lees dan snel verder! Jouw taken zien er als volgt uit: Je bent in deze rol voornamelijk verantwoordelijk voor het bouwen, implementeren en beheren van koppelingen tussen de bestaande systemen (zowel business 2 business als application 2 application). Daarnaast inventariseer je de wensen van in- en externe klanten, die je vervolgens samen met je collega's, vertaalt naar technische specificaties, die jullie zelf ontwikkelen en implementeren.

Bekijk vacature »

Lead React Developer

Dit ga je doen Als Lead React Developer zul jij je voornamelijk gaan bezighouden met: Het werken aan tal van uiteenlopende projecten waar gloednieuwe (web)applicaties van scratch af aan ontwikkeld worden met o.a. React (Native) en Drupal; Het aansturen van een team bestaande uit 5-6 talentvolle en gedreven ontwikkelaars; Het adviseren en meedenken over nieuwe (technische) oplossingen en te gebruiken tools/frameworks; Het meedenken over de architectuur en de juiste implementatiebeslissingen maken; De doorontwikkeling van huidige applicaties. Hier ga je werken Als je inderdaad een ervaren Lead React Developer bent die zichzelf graag nog verder wil ontwikkelen dan is het goed

Bekijk vacature »

APEX Ontwikkelaar in een team van Oracle Developer

Bedrijfsomschrijving Wij zijn op zoek naar een APEX Ontwikkelaar om onze opdrachtgever in Den Haag te versterken. In deze rol zul je verantwoordelijk zijn voor het ontwikkelen en onderhouden van de front-end van onze applicaties met behulp van Oracle Application Express (APEX). Je werkt aan zowel inhouse als externe projecten. De sfeer binnen het Oracle team is gemoedelijk en men probeert elkaar te helpen én van elkaar te leren. Zo ontstaat er een prettige en plezierige werksfeer waar ruimte is voor persoonlijke ontwikkeling en groei. Er wordt gewerkt met de meest nieuwe technologieën waardoor je kennis up-to-date blijft. Het bedrijf

Bekijk vacature »

Front-End React Developer

Als Front-End React Developer verbeter je de user experience van onze eigen webapplicaties voor onze collega's binnen Coolblue. Wat doe je als Front-End React Developer bij Coolblue? Als Front-end React Developer werk je aan de gebruiksvriendelijkheid van onze webshop voor miljoenen klanten met React.js. Je vindt het leuk om samen te werken met de UX designer om stories op te pakken. Daarnaast ben je trots op je werk en verwelkomt alle feedback. Ook Front-end React Developer worden bij Coolblue? Lees hieronder of het bij je past. Dit vind je leuk om te doen Verbeteren van de gebruiksvriendelijkheid van onze webshop

Bekijk vacature »

Junior full stack developer

Functie Als full stack developer binnen onze organisatie ga jij je bezig houden met het bouwen van de user experience van de webapplicaties. Je bent verantwoordelijk voor het vertalen van concepten, briefings en designs naar werkende functionaliteit. Hierbij zorg je ervoor dat applicaties betrouwbaar, veilig en toekomstbestendig zijn en een goede architectuur hebben en behouden. Verder denk je actief na- en mee over nieuwe ontwikkelingen en functionaliteiten om zo elke dag de klantervaring weer te verbeteren. Dit doe je natuurlijk niet alleen maar in een development team. Het team bedraagt momenteel 4 man bestaande uit 2 devops engineers en 2

Bekijk vacature »

Junior Software Developer

Functie omschrijving Wij zijn op zoek naar een Junior Software Developer!? Sta jij aan het begin van jouw loopbaan of heb jij misschien al enige ervaring? Vind jij het daarnaast belangrijk om jezelf constant te kunnen ontwikkelen en uitdagen? Lees dan snel verder! Voor een vooraanstaand softwarehuis in Nieuwegein ben ik op zoek naar een Junior Software Developer. De eigenaar van het bedrijf is ervan bewust dat je als junior nog een hoop kan leren, waardoor je de eerste maanden veel begeleiding en diverse trainingen krijgt. Daarna ga je samen met je collega's aan zowel kleine als grote projecten werken.

Bekijk vacature »

Medior/senior Front-end developer

Functie Onder begeleiding van 3 accountmanagers waarvan er 1 binnen jouw expertise je aanspreekpunt zal zijn ga je aan de slag bij diverse opdrachtgevers. Hij of zij helpt je bij het vinden van een passende en uitdagende opdracht. Hierin houden ze uiteraard rekening met jouw situatie, ervaring en (technische) ambities. De opdrachten duren gemiddeld één tot 2 jaar. Hierdoor kun je je ook echt vastbijten in een project en als consultant impact maken. Naast de opdracht ben je regelmatig met je collega’s van de IT-afdeling om bijvoorbeeld onderlinge kennis te delen, of nieuwe trends te bespreken. Ook worden er regelmatig

Bekijk vacature »

Front-end Developer

Dit ga je doen Het onderhouden, ontwikkelen en testen van front-end software van diverse klant- en medewerkersapplicaties; Het ontwikkelen van maatwerk front-end oplossingen in Vue.js en participeren in een scrumteam; Mede-verantwoordelijk voor het begeleiden en coachen van drie junior front-end developers; Verantwoordelijk voor code-reviews en het opstellen van de juiste documentatie zoals userstories en API ontwerp; Participeren in diverse projecten t.b.v. optimalisatie van diverse applicaties; Het opzetten van API koppelingen met externe applicaties. Hier ga je werken Betreffende organisatie is gevestigd in de regio van Swifterbant en is al ruim 20 jaar lang bedreven in het ontwikkelen en aanbieden van

Bekijk vacature »

Gezocht: Ervaren VB6 developer met C# ambitie!

Bedrijfsomschrijving Dit bedrijf is een vooraanstaande softwareleverancier die gespecialiseerd is in het ontwikkelen van software pakketten voor autoschade herstel bedrijven. De software wordt gebruikt door meer dan de helft van alle autoschade herstel bedrijven in Nederland. Het team van professionals is op zoek naar getalenteerde collega developers die hun vaardigheden willen inzetten om het bedrijf te laten groeien. Functieomschrijving Voor dit bedrijf zoek ik een ervaren VB6 / VB.NET developer met interesse om op termijn verder te gaan in C#. In deze functie ben je verantwoordelijk voor het onderhouden van de bestaande softwarepakketten. Een deel van de code is nog

Bekijk vacature »

Delphi Programmeur

Functie omschrijving Onze opdrachtgever is gespecialiseerd in kantoor-bedrijfssoftware en zit gevestigd in omgeving Numansdorp. Als programmeur ben jij bij dit bedrijf met het volgende bezig; Je vertaalt technische en functionele ontwerpen naar kwalitatieve software. Je ontwikkelt, ontwerpt en test software. Je maakt daarbij veel gebruik met de volgende tools & technologieën: Delphi 10.3 (Rio), QuickReport 6. Je krijgt in deze rol veel vrijheid en verantwoordelijkheid. Je levert projecten van A - Z op, en werkt daarbij projectmatig en gestructureerd. Bedrijfsprofiel Dit bedrijf richt zich op maatwerk software oplossingen. Deze software oplossingen worden ingezet in de financiële branche. Het betreft een

Bekijk vacature »

Software Developer PHP

Functie omschrijving We are looking for a dutch native speaker Voor een opdrachtgever in de regio van Geldrop ben ik op zoek naar een Software Developer PHP. Jij krijgt een rol met veel verantwoordelijkheid in een groeiende organisatie. In deze functie werkt je voornamelijk remote en op een vast moment kom je met het team samen, om samen te werken en nieuwe doelen te bepalen. Wat ga je doen? Je wordt verantwoordelijk voor de interne applicatie; Je zorgt voor de doorontwikkeling van de applicatie: zowel back-end, front-end; De basis van het werk betreft front-end technieken; Periodiek bepaal je samen met

Bekijk vacature »
Jelmer -

Jelmer -

24/02/2008 01:17:00
Quote Anchor link
Ik ben bezig met het opzetten van een structuur voor een flexiebel privileges-systeem, maar het loopt wat in de soep met de queries.

SQL Export van de structuur en wat testdata Edit: voor de volledigheid, ik gebruik vandaag MySQL 5.0

Het idee is dat je een gebruiker in groepen kan indelen (meer op meer relatie) en dat deze groepen weer relaties hebben met de privileges. Daarnaast kan je per gebruiker ook nog relaties met privileges opzetten, welke de relaties van de groepen moeten overrulen.

Dus stel dat ik wil bekijken of een bepaalde gebruiker een bepaalde privilege heeft dan volgt er zo'n soort constructie. Waarde is een 1 of 0, of een gebruiker beschikt over een privilege of niet:
1) als er een relatie tussen de gebruiker en de privilege bestaat, neem dan die waarde
2) anders als er een relatie tussen een van de groepen van de gebruiker bestaat, en de waarde is 1 (waar) dan nemen we die waarde (waar)
3 anders nemen we waarde 0 (niet waar)

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
Invoer:
    @user_id
    @privilege_name

0) Zoek privilege id erbij
    SELECT
        privileges.id as @privilege_id
    FROM
        privileges
    WHERE
        privilege.name = @privilege_name
1) Als
    SELECT
        privileges_users_relations.allowed
    FROM
        privileges_users_relations
    WHERE
        privileges_users_relations.user_id = @user_id
        AND privileges_users_relations.privilege_id = @privilege_id
    Dan geeft privileges_users_relations.allowed terug
2) Anders als
    SELECT
        '1'
    FROM
        privileges_groups_relations
    WHERE
        privileges_groups_relations IN(
            SELECT
                groups_users_relations.id
            FROM
                groups_users_relations
            WHERE
                groups_users_relations.user_id = @user_id
        )
        AND privileges_groups_relations.privilege_id = @privilege_id
    Dan geef 1 terug
3) Anders geef 0 terug.


Ik heb de stapjes al gezet, maar weet niet hoe ik een geheel ervan moet maken. Het mooiste zou een enkele query (eventueel met subqueries) zijn, of een FUNCTION/PROCEDURE

Ander probleem is dat ik voor het beheer een overzicht, bijvoorbeeld een matrix wil maken van alle groepen, en of ze een privilege hebben of niet. Horizontaal moeten dan alle privileges komen, en verticaal alle groepen. Nu bestaan er alleen relaties tussen groepen en privileges waarvan de groep de privilege wel heeft. Hier heb ik inmiddels wel een query voor, maar echt efficient lijkt hij niet. Wat vinden jullie ervan?
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
SELECT
    privileges.name,
    groups.name,
    COUNT(privileges_groups_relations.id)
FROM
    privileges
LEFT JOIN
    groups ON 1=1
LEFT JOIN
    privileges_groups_relations ON
        privileges_groups_relations.privilege_id = privileges.id
        AND privileges_groups_relations.group_id = groups.id
GROUP BY
    CONCAT(privileges.id, '-', groups.id)
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 
PHP hulp

PHP hulp

26/04/2024 01:56:42
 
Bo az

Bo az

24/02/2008 11:07:00
Quote Anchor link
Ik ga eventjes heel zeikerig doen, maar misschien dat het je verder helpt.

Je geeft de volgende query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT
        privileges.id as @privilege_id
    FROM
        privileges
    WHERE
        privilege.name = @privilege_name


Als ik zo even in je script kijk zie ik geen unique (a.k.a. alternative key) op privilege.name wat betekend dat je hier nogal rare resultaten kan verwachten.

Maar waarom maak je eigenlijk niet van privilege.name de primary key? Waarom al die id kolomen, wat is daar de meerwaarde van? Je geeft een pracht beschrijving van wat je wil maar er komen nergens id's in voor dus waarrom voeg je die toe?
Als je minder id's gebruikt is het resultaat waarschijnlijk dat je minder queries/joins nodig hebt en dus wordt het gemakkelijker (en een minimaal snelheids winstje). Voor primary key velden loont het overigens wel de moeite om char ipv. varchar velden te gebruiken.
 
Jelmer -

Jelmer -

24/02/2008 12:11:00
Quote Anchor link
De id's zijn om de tabellen aan elkaar te koppelen. In de koppeltabellen moet ik de gebruiker en de groep kunnen koppelen. Ik gebruik de ID's als row-index om zo voor iedere row een uniek kenmerk te hebben (de combinatie group_id en user_id is ook uniek overigens) en zo vanuit PHP en de koppeltabellen gemakkelijk te kunnen verwijzen naar de andere tabellen.

Verder gebruik ik koppeltabellen zoals groups en groups_users_relations om zo geen dubbele data in groups_users_relations te hebben. Ik zou de tabel groups kunnen laten vallen, en groups_users_relations kunnen voorzien van een varchar-veld met groupname. Dat zou simpeler zijn, maar dan heb ik geen controle meer op typfouten (variaties in groupname) en je krijgt dubbele data. Daarom heb ik alle tabellen zoveel mogelijk genormaliseerd.

Ik heb nu overigens nog een query gemaakt die een matrix met alle groepen, met de bijbehorende gebruikers ophaalt, en de privileges. En of de gebruiker er specifieke instellingen voor heeft. Probleem is inderdaad de grote lading joins:
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
USE Experimenteel_IHGAccessControl

SELECT
    groups.name as groupname,
    users.name as username,
    privileges.name as privilege,
    COUNT(privileges_groups_relations.id) as group_is_allowed,
    privileges_users_relations.allowed as user_is_allowed,
    IF(
        ISNULL(privileges_users_relations.allowed),
        COUNT(privileges_groups_relations.id),
        privileges_users_relations.allowed
    ) as allowed
FROM
    privileges
RIGHT JOIN groups ON
    1=1
RIGHT JOIN groups_users_relations ON
    groups_users_relations.group_id = groups.id
RIGHT JOIN users ON
    users.id = groups_users_relations.user_id

LEFT JOIN privileges_groups_relations ON
    privileges_groups_relations.group_id = groups.id
    AND privileges_groups_relations.privilege_id = privileges.id

LEFT JOIN privileges_users_relations ON
    privileges_users_relations.user_id = users.id
    AND privileges_users_relations.privilege_id = privileges.id

GROUP BY
    CONCAT(groups.id, '-', users.id, '-', privileges.id)

Resultaat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
+---------------+-------------+---------------+------------------+-----------------+---------+
| groupname     | username    | privilege     | group_is_allowed | user_is_allowed | allowed |
+---------------+-------------+---------------+------------------+-----------------+---------+
| Groep Alles   | Gebruiker A | afwassen      |                1 |               0 |       0 |
| Groep Alles   | Gebruiker A | koffie zetten |                1 |            NULL |       1 |
| Groep Alles   | Gebruiker B | afwassen      |                1 |            NULL |       1 |
| Groep Alles   | Gebruiker B | koffie zetten |                1 |            NULL |       1 |
| Groep Beperkt | Gebruiker B | afwassen      |                1 |            NULL |       1 |
| Groep Beperkt | Gebruiker B | koffie zetten |                0 |            NULL |       0 |
+---------------+-------------+---------------+------------------+-----------------+---------+
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 
Bo az

Bo az

24/02/2008 12:26:00
Quote Anchor link
Je hebt geen id's nodig om tabellen aan elkaar te koppelen, dat kan ook prima met andere velden. Je hoeft overigens geen angst te hebben dat je data dan dubbel op gaat slaan, dan sla je misschien groups.name dubbel op, waar je nu groep.id dubbel opslaat (zelfs dubbel voor niets).

Je moet de tabel groups zeker niet laten vallen, daarin staan je groups.name en zoals je al zegt die heb je nodig om tik fouten te voorkomen en wel met een foreign key.

Je tabel wordt er alleen maar beter op genormaliseerd want daarbij wordt er nooit gesproken over het toevoegen van een 'id' kolom.
 
Joren de Wit

Joren de Wit

24/02/2008 12:40:00
Quote Anchor link
@Boaz: je hebt het over optimalisatie van je queries en raadt dan tevens aan om een varchar als foreign key te gebruiken. Dit gaat niet echt lekker samen. Een integer (id) is namelijk als foreign key vele malen efficienter dan een varchar als het gaat om queries met joins erin.

Uiteraard zou je datamodel wel beter genormaliseerd zijn, maar normalisatie kun je ook te ver doordrijven. Soms moet je ervoor kiezen om te denormaliseren om zo de performance te behouden. Vandaar dat het gebruik van een integer als foreign key bijna nooit een slechte keuze is.
Quote:
Voor primary key velden loont het overigens wel de moeite om char ipv. varchar velden te gebruiken.
Uiteraard levert een char een betere performance als een varchar, helaas zal dat in dit geval niet echt een optie zijn. Een char verlangt namelijk een vaste lengte terwijl een naam van een privilege juist variabel is.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
Bo az

Bo az

24/02/2008 12:47:00
Quote Anchor link
Blanche schreef op 24.02.2008 12:40:
@Boaz: je hebt het over optimalisatie van je queries en raadt dan tevens aan om een varchar als foreign key te gebruiken. Dit gaat niet echt lekker samen. Een integer (id) is namelijk als foreign key vele malen efficienter dan een varchar als het gaat om queries met joins erin.


Zoals je later ook al quote raad ik aan om er een char van te maken en absoluut geen varchar. Een char reserveerd namelijk alleen een vast aantal bytes. In dit geval heb je er dus vooral voordeel van omdat het je query versneld.

Edit:
Wie zegt dat je in een char ook alle chars moet vullen?

Edit:
Een iteger is ook zeker geen slechte keuze als foreign key, maar dan moet je ze wel hebben, als je ze gaat toevoegen wordt het wat anders.


Of je dit doorschieten is in normaliseren? ik denk het niet omdat het in het aantal joins kan schelen, je hoeft namelijk niet meer te joinen op goups om de goups.name op te halen en zo kan het nog wel meer joins schelen.
Gewijzigd op 01/01/1970 01:00:00 door Bo az
 
Jelmer -

Jelmer -

24/02/2008 15:50:00
Quote Anchor link
Ik heb een tabel zonder id's even geprobeerd, en er wat vergelijkbare queries voor geschreven (overzicht van alle gebruikers en alle privileges, en of ze die hadden, direct of indirect (via groepen of specifiek)) en het scheelt 1, soms 2 joins. Daarvoor ruil ik de indexen op nummertjes in voor indexen op char[50], en de joins die het scheelt waren puur primary-key-lookup joins die volgens mij amper tijd kosten. Voordeel is dan wel weer dat op die char[50] een index zit, en ik dus de data uit de index haal. Maar ik kan ook indexen op de waarden van de tabellen met id's aanmaken.

Ik heb trouwens een werkende query waarmee ik aan de hand van een user_id en een privilege_name kan uitrekenen of de user de privilege heeft, maar het is wel een beest(je)
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
USE Experimenteel_IHGAccessControl

SET sql_mode = STRICT_ALL_TABLES;

SET @user_id = 3;

SET @privilege = 'afwassen';

SELECT
    IF(
        !ISNULL(privileges_users_relations.allowed),
        privileges_users_relations.allowed,
        COUNT(privileges_groups_relations.id) > 0
    ) as allowed
FROM
    privileges

LEFT JOIN groups_users_relations ON
    groups_users_relations.user_id = @user_id
    
LEFT JOIN privileges_groups_relations ON
    privileges_groups_relations.group_id = groups_users_relations.group_id
    AND privileges_groups_relations.privilege_id = privileges.id

LEFT JOIN privileges_users_relations ON
    privileges_users_relations.user_id = @user_id
    AND privileges_users_relations.privilege_id = privileges.id

WHERE
    privileges.name = @privilege

GROUP BY
    privileges.id


Voor de id-loze database is het me nog niet gelukt eentje te maken. Een uitdraai van mijn database met id's en zoals Boaz hem voorstelde kan je daar dus vinden :)
 



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.