[ACL] view

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jurgen assaasas

Jurgen assaasas

12/04/2009 13:55:00
Quote Anchor link
Ik ben een beetje aan het experminteren met ACL's (Access Control List). Ik heb dit principe wel door en zie daar alle voordelen in. Ik snap dat je mensen kunt restricten op bepaalde zaken, maar hoe geef je dit door aan bijvoorbeeld de template parser.

Voorbeeldje:

Je kunt hier op PHPhulp je posts editten. Hoe zorg ik ervoor (via OOP en smarty) dat het edit icoon (op een eenvoudige manier) alleen bij de juiste user wordt getoond?
Gewijzigd op 01/01/1970 01:00:00 door Jurgen assaasas
 
PHP hulp

PHP hulp

19/01/2020 09:45:25
 
Crispijn -

Crispijn -

12/04/2009 14:25:00
Quote Anchor link
Gewoon een functie aanroepen? In de functie kijk je of de edit knop getoond mag worden of niet.
 
Jurgen assaasas

Jurgen assaasas

12/04/2009 14:40:00
Quote Anchor link
Dat snap ik, maar hoe geef ik dit door aan mijn templateparser zodat deze alleen wordt getoond bij de juiste post.

En hoe zit het met bijv posts editten.
Een post is een post. of die nu gemaakt is door jou, of door mij maakt volgens het systeem niet uit. Maar hoe maak ik dan een rol aan zodat je alleen je eigen posts kan bewerken en niet van andere. Ik kan dit wel simpel bouwen natuurlijk maar ik wil het in de gedachten van OOP doen i.c.m. met Smarty en ACL om rollen en rechten te geven.
 
Crispijn -

Crispijn -

12/04/2009 15:31:00
Quote Anchor link
Ik kan je hier denk ik niet verder mee helpen. Als ik kijk naar bestaande applicaties wordt er gewoon de functie aangeroepen

show_edit();

functie show_edit zou er dan zo uitzien

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
    function show_edit(){
        //kijk of het topic id overeen komt van het user id
        //selecteer rechten aan de hand van het user id
        
        //als één van de twee true geeft dan return je de boel, anders niks.

    }
?>


Ik kan er helaas niet meer van maken...
 
Arian Stolwijk

Arian Stolwijk

12/04/2009 17:16:00
Quote Anchor link
iets als
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

$smarty
->assign('edit_knop',$acl->isAllowed($user,'topic_edit'));

?>


en dan natuurlijk met smarty nog een {if $edit_knop}...
 
Jurgen assaasas

Jurgen assaasas

12/04/2009 17:40:00
Quote Anchor link
Ja, in PHP zou ik dan zoiets doen:

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
<?php

if($_SERVER['REQUEST_METHOD'] == 'POST')
{

    if($acl->isAllowed($_SESSION['userid', 'edit_topic') && $_SESSION['userid'] == $post->getOwner())
    {

        //doe hier de wijzigingen
        $smarty->assign('editbutton', '<a href="edit.php?messageid='.$_GET['id'].'"><img src="images/edit.png" /></a>');
    }

    else
    {
        $smarty->assign('message', 'U heeft geen rechten om dit topic te wijzigen.');
    }
}


?>


Is dit een beetje een verstandige zaak van werken?

Uiteraard zou dan $_GET nog gecontroleerd moeten worden, maar dat is aan de DB class (ik gebruik PDO meestal).
Gewijzigd op 01/01/1970 01:00:00 door Jurgen assaasas
 
Jelmer -

Jelmer -

12/04/2009 17:54:00
Quote Anchor link
Kan je niet direct vanuit smarty die ACL laag aanspreken? Ik gebruik zelf eigenlijk altijd PHP als template-taal, en dan is het gewoon
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php if($acl->user_may('edit', $post)):?>
<a href="edit.php">bewerk mij</a>
<?php endif ?>

Ergens in de ACL laag moet je dan controleren of de op dit moment ingelogde user ook de eigenaar van de $post is, of een admin.

Ik neem aan dat Smarty ook wel zoiets dergelijks mogelijk maakt.
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 
Thijs X

Thijs X

12/04/2009 18:23:00
Quote Anchor link
Je zou in je template een ifstatement kunnen zetten bijv

{ if $edit}
// hier je HTMl voor de edit button
{/if}

en dan een variable meegeven die de output van je isAllowed functie heeft.
 
Crispijn -

Crispijn -

13/04/2009 03:41:00
Quote Anchor link
Op die manier wordt je template wel weer volgestampt met allerlei php if statements. Wanneer je alleen een functie aanroept (het is indd wel een extra functie maar dat zal toch niet zo veel uitmaken?) dan hou je je template wel schoner...
 
Jeffrey H

Jeffrey H

13/04/2009 09:37:00
Quote Anchor link
Op de manier van thijs heb je wel het voordeel dat de designer de button kan aanpassen.
 
Jurgen assaasas

Jurgen assaasas

13/04/2009 09:50:00
Quote Anchor link
Nouja, ik denk dat ik de manier van Thijs gebruik. Uiteraard de Smartyfunctie {if}. En dan gewoon een variabelen setten als de gebruiker geauthoriseerd is. Als hij dat niet is, de variabelen niet setten.
 
Onbekend Onbekend

Onbekend Onbekend

13/04/2009 10:19:00
Quote Anchor link
Houdt er ook rekening mee dat de user ook zijn eigen post moet kunnen editen, en eventueel ook een restrictie aan de leeftijd van de post.
 
Joren de Wit

Joren de Wit

13/04/2009 10:25:00
Quote Anchor link
Tommy schreef op 13.04.2009 10:19:
Houdt er ook rekening mee dat de user ook zijn eigen post moet kunnen editen, en eventueel ook een restrictie aan de leeftijd van de post.
Dat wordt allemaal bepaald door de isAllowed() method. In de template hoef je alleen maar te controleren of de variabele die het resultaat daarvan aangeeft TRUE of FALSE is...
 
Ed

Ed

14/04/2009 20:50:00
Quote Anchor link
De oplossing ligt in een static klasse die als auhorizer optreed, Hierbij geef je een user, en object mee, en dan kijkt de klasse in de ALC(DB?) of hij die toegang heeft. Hier kan je allemaal methodes op bedenken, zoals meervoudig autorizen van een single user tegen meerdere objecten. Of als "lege" user tegen een x aantal objecten.
 
Jurgen assaasas

Jurgen assaasas

14/04/2009 21:17:00
Quote Anchor link
Zou je een voorbeeld kunnen geven want ik snap je oplossing niet echt.
 



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.