Queries mbt rechtensysteem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Software Ontwikkelaar

Functie omschrijving Voor een echt familiebedrijf in de omgeving van 's-Hertogenbosch ben ik op zoek naar een Software Developer. Jij gaat in de functie van Software Developer werken met C# en .NET framework Jij gaat maatwerk software ontwikkelen en softwareoplossingen creëren. Daarnaast optimaliseer je de bestaande software. Oplossingen waar de klant echt iets aan heeft, jij krijgt er energie van op dit te realiseren. Je gaat werken in een Microsoft omgeving(ASP.NET) en gebruikt daarnaast C# en MVC. Samen met het huidige IT team binnen deze organisatie verwerk je de wensen van de klant tot een (eind)product. Bedrijfsprofiel Deze organisatie is

Bekijk vacature »

Software Programmeur PHP - JAVA

Functie Heb jij altijd al willen werken voor een bedrijf, dat veilige netwerkverbindingen levert, door middel van veilige oplossingen, die door middel van de nieuwste technologieën ontwikkelt zijn? Stop dan nu met zoeken! Voor een opdrachtgever in omgeving Moordrecht zijn wij op zoek naar een programmeur. Hoe kan jouw dag er straks uitzien? Je gaat software en webapplicaties ontwikkelen met behulp van de talen C / C++ / PHP. Je gaat technische klussen uitvoeren op locatie bij klanten. Je onderhoudt contact met de projectleider om er zeker van te zijn dat een projecten goed verlopen. Je gaat klanten ondersteunen op

Bekijk vacature »

Java developer Zorgsysteem

Dit ga je doen Werken aan het eigen gebouwde zorgsysteem; Verbeteringen maken en toepassen binnen de applicatie; Jij gaat werken aan de Back-end van de applicatie en sporadisch werk je mee aan de Front-end; Samenwerken met andere teams voor een optimaal resultaat; Jij kan 'clean' werken en high quality code schrijven; Jij werkt resultaatgericht. Hier ga je werken De organisatie houdt zich bezig met diverse applicaties met betrekking tot zorgregistratie. Dankzij hun systeem komt alle informatie, omtrent de zorg van een patiënt, op een overzichtelijke en toegankelijke manier samen in één systeem te staan. Op deze manier is deze informatie

Bekijk vacature »

Fullstack developer

Functieomschrijving Heb jij kort geleden jouw HBO ICT diploma in ontvangst mogen nemen? Of ben je toe aan een andere uitdaging? Voor een erkende werkgever in de omgeving van Breda zijn wij op zoek naar een Fullstack developer. Kennis of ervaring met C# & SQL is een must! Je houdt je bezig met het ontwikkelen van nieuwe functionaliteiten; Je bent verantwoordelijk voor de beheer en ontwikkeling van de software; Je draagt bij aan de implementatie van aanpassingen, verbeteringen en aanvullingen in de C# based applicaties; Je test de software en ontwikkelt deze door; Je brengt de aanpassingssuggesties van klanten in

Bekijk vacature »

Full stack developer

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 »

Software ontwikkelaar

Ben jij graag bezig met verschillende projecten? Vind jij beleving van klanten én medewerkers ook belangrijk? Wij zijn vanwege de doorontwikkeling van het applicatielandschap van onze opdrachtgever op zoek naar een fulltime software ontwikkelaar. Omschrijving Jij en jouw collega’s zijn verantwoordelijk voor de continuïteit en waarborging van het applicatielandschap. Om de processen vloeiend te laten verlopen is software ontwikkeling daarom van essentieel belang. Onze opdrachtgever doet dit voornamelijk zelf, met door hun eigen ontwikkelde applicaties. Dit betekent dat jij: functionele eisen vertaalt naar gebruiksvriendelijke software; tijdens SCRUM sessies advies geeft over het te bouwen ontwerp; nieuwe software ontwikkelt en het

Bekijk vacature »

Junior Software developer

Functie Als junior .NET ontwikkelaar start jij in een compact team met drie ervaren .NET ontwikkelaars. Wij werken op projectbasis en begeleiden zelf het hele traject van A tot Z. Wij bieden jou dan ook een brede functie aan met veel technische uitdaging! Ons traject ziet er als volgt uit: 1) Wij analyseren de behoefte van onze klant 2) Wij werken de behoefte uit en vertalen dit naar technische werkzaamheden en maken een uren/kosten schatting; 3) Wij gaan aan de slag met het ontwikkelen van het product met directe feedback van de klant, zodat datgene gerealiseerd wordt, wat gewenst is;

Bekijk vacature »

Fullstack developer - medior

Functie omschrijving Ben jij toe aan een nieuwe uitdaging en zou jij graag bij een platte maar informele organisatie willen werken? Voor een mooi softwarebedrijf in omgeving Dordrecht zijn wij op zoek naar versterking voor op de afdeling Software Development! Als Fullstack developer wordt je bij dit bedrijf onderdeel van de volledige ontwikkeling van requirement tot oplevering! Werkzaamheden Jouw focus ligt op de front end en alles wat daarbij komt kijken. Je gaat ontwerpen, ontwikkelen, testen en valideren. Je zult voornamelijk werken met React.js en Typescript. Maar ook Javascript, HTML en CSS komen aanbod. Daarnaast zal je ook regelmatig met

Bekijk vacature »

Ervaren Full stack developer

Functie omschrijving Ben jij op zoek naar een uitdagende in-house functie bij een bedrijf met enorme groeipotentie? Ben jij op zoek naar een nieuwe uitdaging vol afwisseling en gezelligheid? Dan ben je bij dit bedrijf aan het juiste adres! Wij zijn in omgeving Breda op zoek naar een ervaren full stack developer. Je gaat werken voor een zeer gewilde werkgever met goede arbeidsvoorwaarden. Je krijgt een plekje in het jonge IT team, work hard, play hard is hier duidelijk het motto! Jouw werkzaamheden zien er als volgt uit: Jij bent verantwoordelijk voor het ontwerpen en bouwen van webapplicaties. Je bent

Bekijk vacature »

C# .NET Developer

Functie omschrijving Wij zijn op zoek naar een C# .NET Developer voor een leuke opdrachtgever in de omgeving van Hilversum! Voor een leuk bedrijf in de omgeving van Hilversum zijn wij op zoek naar een Back-end developer die klaar is voor een nieuwe uitdaging. Ben jij iemand die graag aan verschillende projecten werkt en het ook leuk vindt om bij klanten op bezoek te gaan? Dan ben jij de perfecte kandidaat! Deze functie is erg divers, je moet dus goed kunnen schakelen. Je komt te werken in een klein team van developers. Binnen het bedrijf hangt er een gemoedelijke informele

Bekijk vacature »

T-SQL Database developer

Functie omschrijving Ben jij een ETL database specialist? Houd jij ervan om te puzzelen met Databases, Query's & Stored procedures? Zoek jij uitdaging, vrijheid en verantwoordelijkheid? Zoek dan niet verder! Wij zijn per direct op zoek naar medior en senior database developers. Je gaat werken voor een relatief klein softwarebedrijf in omgeving Tilburg. Samen met 12 collega's (allemaal techneuten), ga jij je bezig houden met het bouwen en/of onderhouden van database software. Deze software wordt internationaal ingezet voor het automatiseren van logistieke processen. Jouw werkzaamheden gaan er als volgt uit zien: Je bent in een klein team met developers, verantwoordelijk

Bekijk vacature »

Software Developer

Functie omschrijving In deze functie ga je aan de slag met het door ontwikkelen van de interne software. Zij maken gebruik van een CRM, wat door de hele organisatie gebruikt wordt. Andere taken: Je gaat het CRM-systeem door middel van PHP verder ontwikkelen; Verder bouw je verschillende API's en koppelingen tussen systemen; Ook ga je collega's ondersteunen bij vragen over de software en applicaties; Deelnemen aan overleggen met het development team; Bij interesse is er de mogelijkheid om junioren te gaan begeleiden. Bedrijfsprofiel Dit bedrijf is actief binnen de telecombranche. Het hoofdkantoor zit in regio van Den Bosch en er

Bekijk vacature »

Cymer Patch Server Developer

Vacature details Vakgebied: Software/IT Opleiding: Senior Werklocatie: Veldhoven Vacature ID: 12919 Introductie This new patch server will be built on Python and Django ReST and GraphQL services with a React frontend, it will consist of several microservices and run on a Kubernetes cluster. It will be supported by several middleware applications such as ElasticSearch, Redis, RabbitMQ, Oracle and Artifactory. Functieomschrijving The Patch Admin team always aim to deliver software at a high quality, we avoid sacrifices here to maintain our velocity. Practically this means that we practice test driven development and perform end-to-end automated testing on our software. This means

Bekijk vacature »

C# Ontwikkelaar

Functieomschrijving Voor een software ontwikkelaar in de omgeving van Vught zijn we op zoek naar een gemotiveerde C# ontwikkelaar. Deel jij hun passie voor development en dan vooral in C#.NET? Dan kan dit wel eens jouw droombaan zijn! Jouw werkzaamheden zullen er ongeveer als volgt uit gaan zien Door de wensen van de klant goed te begrijpen ga jij aan de slag dit om te zetten naar passende oplossingen en werk je deze uit tot een sterk eindproduct. Je gaat je bezighouden met de ontwikkeling van webapplicaties en websites, dit doe je door middel van ASP.NET, MVC Frameworks en C#.

Bekijk vacature »

Developer Front-end

Functie omschrijving Front-end Developer gezocht! Wij zijn op zoek naar een front-end developer voor een organisatie in de regio Veenendaal die de eindverantwoordelijkheid op zich neemt van alles wat met design te maken heeft. Je hebt in deze functie een adviserende rol hiervoor moet je beschikken over een grote dosis vakinhoudelijke kennis. Je creëert unieke concepten door samen met collega’s en klanten te overleggen over aangeleverde designs. Hiermee draag jij je steentje bij aan de groeiambities van de klant. Jij wordt het vaste aanspreekpunt voor klanten wanneer het gaat over planningen, hierin is het jouw taak om alle betrokkenen goed

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

05/05/2024 13:08:23
 
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.