Queries mbt rechtensysteem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Full stack ontwikkelaar Laravel, Vue.js

Functie Als ontwikkelaar binnen deze organisatie hou jij je voornamelijk met lopende projecten voor de verschillende klanten. Zo bouw je de ene dag aan prijsschifting systemen en de andere dag onderzoek je crawlers en stel je ze zo in dat de data goed binnen komt binnen het systeem. Daarnaast bouw je mee aan dashboards en ben je dus constant bezig met het verbeteren van het platform. Er is een vaste werkwijze, zo werken ze met Trello kaarten en onderverdelen ze deze aan het begin van iedere week onder de developers. Dit wordt door de lead developer gedaan, maar in samenspraak

Bekijk vacature »

Developer (One Data)

Do you have experience with managing IT Teams in a service delivery organization? Are you keen to bring the team and our platform to a higher level? Then Nutreco has a very interesting role for you! As a One Data developer you are responsible for the management, running and functional use of our integration landscape and processes within Nutreco. Nutreco is using at this time BizTalk 2016, and Apigee for its API management, to be replaced by Azure Integration Services as of 2023. You will be part of a virtual teams of 11 people (own and outsourced) working in an

Bekijk vacature »

Frontend Developer - Leeuwarden

Frontend Developer – Leeuwarden Als Frontend Developer bouw jij mee aan het onderwijs van de toekomst! In een scrum team werken met jonge en enthousiaste collega’s, moderne technieken, ruimte voor eigen ontwikkeling en op een proactieve wijze kunnen meewerken aan innovatie binnen het onderwijs. Magister is het state-of-the-art softwarepakket dat scholen in het voortgezet onderwijs op alle fronten ontzorgt. Van leerlingenadministratie tot het ondersteunen van individuele leerlijnen, van toegang tot digitaal lesmateriaal tot het plannen van het lesrooster. In de Magister app bedient Magister ruim 2,5 miljoen gebruikers waarvan, dagelijks meer dan 600.000 unieke. Hiermee is Magister de absolute marktleider

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

Bekijk vacature »

Fasttrack learning & development voor Java dev

Wat je gaat doen: Wij zoeken enthousiaste en ambitieuze junior en medior ontwikkelaars die toe zijn aan de volgende stap in hun carrière. Wij helpen je op je pad naar senior ontwikkelaar door ons fasttrack learning en development programma. Na een kort en intensief programma ga jij aan de slag bij klanten van DPA. Daarnaast krijg je veel ruimte om je te ontwikkelen als persoon en als specialist. De eerste maand gaan we aan de slag om je certificeringen te behalen waaronder OCP (Oracle Certified Professional). Daarnaast nemen we een deepdive in Spring Boot. Ook laten we je kennismaken met

Bekijk vacature »

Front-end developer Consultancy in teamverband wer

Functie Het team bestaat uit User Experience designers, Data Scientists en Software Engineers. Momenteel zijn ze op zoek naar een ervaren Front-end of Fullstack developer die samen met de consultants aan de slag gaat om de business requirements te vertalen naar technische oplossingen. Los van het finetunen van extenties, help je bij het configureren van bijvoorbeeld een mobiel bankieren app. Hierin ben je van A tot Z betrokken en zie je bijvoorbeeld ook toe op de uitvoering van testen. Je expertise wordt optimaal benut en je krijgt verschillende kansen om deze uit te breiden door met verschillende innovatieve technologieën aan

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 »

PHP Developer

Zie jij mogelijkheden om onze tooling technisch te verbeteren en uit te bouwen? Over Jobmatix Jobmatix is een innovatieve en internationale speler op het gebied van jobmarketing. Onze jobmarketing automation tool helpt organisaties bij het aantrekken van nieuw talent door vacatures digitaal, geautomatiseerd en op een efficiënte manier te adverteren en onder de aandacht te brengen bij de doelgroep op 25+ jobboards. Volledig performance-based, waarbij organisaties betalen op basis van cost per click of cost per applicant. Maandelijks wordt onze jobmarketing automation tool al gebruikt door vele directe werkgevers, intermediairs en mediabureaus, waaronder Picnic, Rijkswaterstaat, AdverOnline, Schiphol, DPA, Teleperformance en

Bekijk vacature »

Java Ontwikkelaar

Java/Kotlin Developer Ben jij een ervaren Java/Kotlin developer met een passie voor het automatiseren van bedrijfsprocessen? Wil je graag deelnemen aan uitdagende projecten bij aansprekende klanten? En ben je op zoek naar een professioneel, ambitieus en dynamisch bedrijf om je carrière verder te ontwikkelen? Kom dan ons team bij Ritense in Amsterdam versterken! Zo ziet de functie eruit: Als Java/Kotlin developer bij Ritense ben je verantwoordelijk voor de ontwikkeling en implementatie van applicaties die bedrijfsprocessen automatiseren, zodat onze klanten slimmer, efficiënter en klantgerichter kunnen werken. Als developer ben je in de lead en zorg je voor de correcte oplevering van

Bekijk vacature »

PHP Developer

Functieomschrijving Vanuit het hoofdkantoor in omgeving Breda ben je als PHP/Symfony Developer niet alleen gefocust op het ontwikkelen van software. Daarnaast ben je voortdurend bezig met het zoeken naar nieuwe trends en ontwikkelingen die van waarde kunnen zijn voor de efficiëntie van software ontwikkeling. Hieronder een kort overzicht van jouw takenpakket: Het ontwerpen en implementeren van webapplicaties met het Symfony Framework; Het schrijven van een schone en efficiënte codes; Het testen van ontwikkelde applicaties om te zorgen dat ze goed functioneren en voldoen aan de eisen van de klant; Onderhouden en updaten van bestaande applicaties die zijn gebouwd met het

Bekijk vacature »

Software Developer

Dit ga je doen Ontwikkelen aan de software dat beschikbaar is op de substations; Ontwikkelen in C++, C, Python en JavaScript. Daarnaast op een Embedded Linux omgeving, opgebouwd met containers en DevOps; Meewerken aan cyber security (OWASP); Uitvoeren/bouwen van geautomatiseerde testen in samenwerking met de Quality Specialist; Vertalen van wensen van de klanten/business naar werkbare/duurzame oplossingen. Hier ga je werken Als Software Ontwikkelaar kom je te werken bij een organisatie gericht op de (internationale) energiemarkt, waar wordt gewerkt voor het verwerven en verwerken van realtime, high quality data. Er wordt gewerkt vanuit het hart van de substations en direct voor

Bekijk vacature »

Software developer

Functie Momenteel zijn ze op zoek naar een Software developer die, veelal fullstack, mee gaat werken aan de ontwikkeling van de producten en zo helpt aan de uitvoering van hun ontwikkelprojecten. Je komt te werken binnen hun development team bestaande uit 6 ontwikkelaars. Ze staan zowel open voor meer junior als medior/senior developers. Je kunt snel veel verantwoordelijkheid krijgen en doorgroeien binnen het bedrijf. Bovendien ben je betrokken bij het bepalen van de product roadmap en de inbreng van (nieuwe) technologieën. De applicaties waaraan je werk worden gebruikt op onderwijsinstellingen door heel Nederland. De tech-stack bestaat voornamelijk uit Laravel (PHP),

Bekijk vacature »

Productontwikkelaar Food

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

Bekijk vacature »

Medior Java developer (fullstack)

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 »

.NET software developer

Functie omschrijving Voor een gewilde werkgever in omgeving Roosendaal zijn wij op zoek naar een back-end software developer met een aantal jaar werkervaring. Je krijgt een plekje in het workflow team en je zal betrokken worden bij het bouwen van nieuwe software, en het optimaliseren van bestaande code. Je werkt bij dit bedrijf in een Scrum team waarin je soms klantcontact hebt. Jouw werkzaamheden zullen er als volgt uit zien: Je krijgt een plekje op de in-house IT afdeling. Deze afdeling bestaat uit zo'n 12 collega's, verdeeld over verschillende specialisaties (BI, Beheer, Business software & workflow). De vacature staat open

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

11/12/2024 22:10:37
 
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.