Queries mbt rechtensysteem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

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 »

Senior Lead Front End Developer

Functieomschrijving Voor Stichting Waternet zijn wij op zoek naar een senior Lead Front End Developer. Binnen het DevOps team Online zijn we op zoek naar een Senior Lead Front End developer met kennis van toegankelijkheid. Deze developer zal zich bezighouden met development van webpaginas die in verbinding staan met systemen uit het back office. Taken Ontwerpen, ontwikkelen, implementeren, documenteren en beheren van webapplicaties in een Azure-omgeving Debuggen, analyseren en oplossen van problemen in de OTAPomgevingen Je participeert in het DevOpsTeam Online voor het verder uitwerken en implementeren van gebruikerswensen Je bent betrokken bij toegankelijkheid audits en het implementeren van WCAG

Bekijk vacature »

Front end developer

Functie Jij als ervaren Front end developer bent een expert het gebied van Javascript en React. Je wordt onderdeel van een multidisciplinair team bestaande uit een PO, twee Front end developers, een DevOps/Back end developer, een UX/UI designer en een projectmanager. Verder is er iemand verantwoordelijk voor de HR en is de algemeen directeur nauw betrokken bij alle projecten. Dagelijks hou jij je bezig met de verschillende projecten die zijn opgenomen in de sprint. Daarnaast denk je mee over mogelijke oplossingen om de behoefte van de klant op de beste manier in te vullen. Verder spar jij intern met collega’s

Bekijk vacature »

Network Engineer (f/m/d) in Heidelberg

Network Engineer (f/m/d) The IT Services team operates and supports the IT infrastructure and services at EMBL headquarters in Heidelberg and at the laboratory’s sites in Barcelona and Rome. As part of IT Services, the Network team is responsible for managing and developing the network infrastructure in our data centres, on campus, and to our external network providers. As a leading scientific institution with highly data-intensive research, extensive data flows at and between the laboratory’s six sites and to the Internet, EMBL is connected to national and international scientific networks using state-of-the-art technologies from vendors including Cisco, Extreme Networks and

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 »

Java/Kotlin Developer

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 »

C# developer

Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. Ga je bij ons als C# Developer aan de slag? Dan werk je dagelijks met collega’s aan de mooiste IT-projecten. Deze snelgroeiende groep collega’s krijgt energie van hun vak en dat merk je op de werkvloer. Natuurlijk krijg jij de mogelijkheid je te certificeren. We organiseren regelmatig technische Meet-ups en doen we veel aan kennisdeling. Mede hierdoor zij wij dit jaar Microsoft Partner of the Year geworden. Sogetisten staan klaar voor elkaar, hebben lol met elkaar en daarmee behalen we de mooiste resultaten! Werken bij Sogeti

Bekijk vacature »

PHP Developer (junior functie)

Functie omschrijving Ben jij een starter en wil je werken bij een jong en leuk bedrijf? Lees dan verder! Wij zijn op zoek naar een PHP Developer binnen een junior functie. Binnen dit bedrijf gaat het om persoonlijke aandacht en ontwikkeling! Je komt te werken voor een leuk communicatiebureau die alles op het gebied van online en offline communicatie doet. Dit doen zij voor verschillende branches, waardoor je aan diverse soorten projecten mag werken, dit maakt deze baan erg leuk! Daarbij werk je aan een door hun zelf ontwikkeld framework welke goed leesbaar is. Je maakt voor bedrijven op maat

Bekijk vacature »

Software Ontwikkelaar PHP

Functie omschrijving Full Stack Software Ontwikkelaar gezocht! Voor een bedrijf in de regio van Ermelo zijn wij op zoek naar een Software Ontwikkelaar die gaat bijdragen aan het door ontwikkelen, onderhouden en optimaliseren van SaaS applicatie van dit bedrijf. Hierbij ga jij voor- en samenwerken met de klanten van de organisatie, het is hierbij dus van groot belang dat je communicatief vaardig bent en dat je beschikt over beheersing van zowel de Nederlandse als Engelse taal. Bedrijfsprofiel Waar ga je werken? Altijd al in een echt familiebedrijf willen werken? Dan is dit je kans! Het bedrijf waar je komt te

Bekijk vacature »

Java developer - procesoptimalisatie (Inhouse)

Functie Wat ga je doen als Java developer? Jij als back end developer hebt al enige ervaring opgedaan in jouw vakgebied. Voornamelijk het werken met Java en Spring spreekt jou aan. Jij wordt samen met je collega developers in het team verantwoordelijk voor de gehele back end van de applicatie. Hierdoor heb jij veel zelfstandigheid in je rol en zul je ook zelf beslissingen samen met de PO maken. Er wordt gewerkt volgens de SCRUM methodiek, om zo structuur te creëren in de werkzaamheden. Binnen de 2-wekelijkse sprints pak jij je taken op die samen met de PO afgestemd zijn.

Bekijk vacature »

PHP Back-end Developer

Vacature details Vakgebied: Software/IT Opleiding: Starter Werklocatie: Nijmegen Vacature ID: 13633 Introductie OUr client develop websites, webshops, and digital environments that are used by many visitors daily. They are seeking an experienced PHP-Developer Back-end to join the team. If you're looking for a position where you can tackle challenging, innovative, and multidisciplinary ICT projects and make a difference, this vacancy might be for you! Functieomschrijving As a PHP developer, you'll develop websites and digital environments used by many visitors daily. You'll work as a back-end developer and want to continuously develop in this field. You can work independently and efficiently,

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 »

NodeJS developer

Functie Als Fullstack developer kom je te werken in het ontwikkelteam. Je bent samen met je collega’s continu bezig om de software uit te breiden, maar hiernaast doe je onderzoek naar de inzet van nieuwe technieken, tools of bijvoorbeeld Machine Learning. Ze willen met hun software echt voorlopen op andere en toegevoegde waarde leveren voor de eindgebruiker. Mede hierom zijn ze erg benieuwd naar iemand zijn persoonlijkheid, of hij graag nieuwe dingen uitzoekt (Google!), en initiatief neemt. Qua technische kennis zoeken ze iemand die goed op de hoogte is van de nieuwste ontwikkelingen, daar zij nu ontwikkelen op NodeJs back-end,

Bekijk vacature »

.NET developer

Functie Als .NET ontwikkelaar ga jij aan de slag bij een van onze klanten actief in de High Tech Industrie. Onze klanten zijn voornamelijk gelokaliseerd in de omgeving van Eindhoven. Wij zijn erg selectief als het gaat om de projecten die wij accepteren en richten ons dan ook alleen op innovatieve en complexe projecten. Omdat onze klanten voornamelijk gespecialiseerd zijn in de machinebouw, werk jij ook vaak dicht tegen de machines aan. Ons team bestaat momenteel uit Embedded engineers, IOT developers en Cloud engineers. Wij werken voornamelijk aan Microsoft projecten waar er gebruik wordt gemaakt van WPF, UWP, .NET Core

Bekijk vacature »

.NET developer

Functie Als developer heb jij de keuze om aan te sluiten bij het team (13 developers) die op locatie projectmatig bij klanten werkt. Wanneer jij liever intern bij de werkgever werkt is er ook alle ruimte voor jou in het interne team (8 developers) van dit bedrijf. Je werkt samen aan verschillende projecten bij of voor de klant. Het project wordt aangeleverd door sales aan de project manager. Die maakt samen met de Resourcer een planning en op basis daarvan wordt uit het development team een “projectgroep” opgesteld. Hoeveel en welke projecten jij wilt oppakken gebeurt geheel in samenspraak 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

20/05/2024 03:10:34
 
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.