Des limitations pour vos politiques de sécurité
La gestion des droits utilisateur dans eZ Publish est, vous le savez sans doute, assez précise et autorise un contrôle d'accès avec une granularité très fine. En effet, la plupart des modules du kernel permettent d'en limiter l'accès au moyen de politiques de sécurité que l'on peut attribuer à un utilisateur ou à un groupe d'utilisateurs. C'est particulièrement le cas pour le module content, central au CMS, grâce à ses limitations de fonctions configurables dans le backoffice. Ces limitations nous offrent la possibilité de définir précisément le champ d'action d'un contributeur au niveau du contenu géré par eZ Publish.
Définir ses fonctions de module pour en limiter l'accès
Il est bien sûr possible de définir des règles de sécurité configurables de la même manière pour nos propres modules. Il suffit pour cela de créer une liste de fonctions pour notre module, dans le fichier module.php :
extension/myextension/modules/mymodule/module.php
<?php $Module = array('name' => 'mymodule'); $ViewList = array(); $ViewList['myview'] = array( 'script' => 'view.php', 'params' => array(), 'functions' => array( 'myfunction' ) ); $FunctionList['myfunction'] = array();
Ici nous définissons une fonction pour le module mymodule et nous l'affectons à la vue myview. Cette fonction apparaîtra dans la liste correspondante lors de la définition d'une nouvelle politique de sécurité pour le module mymodule.
Vous retrouverez ce genre de définition dans la plupart des modules du kernel, voire d'extensions développées par eZ Systems ou plus largement par la communauté (c'est le cas par exemple de NovenINIUpdate ).
Ce mode de fonctionnement suffit dans la plupart des cas, mais comment faire si l'on souhaite appliquer des limitations plus poussées comme pour le module content (langue, section, etc...) ?
Définir ses propres limitations
Comme vous l'avez sûrement remarqué, dans l'exemple de module.php ci-dessus, la variable $FunctionList['myfunction'] est un tableau vide, ce qui signifie que la fonction ne prévoit aucune limitation. Pour en ajouter, il suffit de le remplir avec les bonnes valeurs.
Exemple pour une limitation au niveau de la langue :
<?php $Module = array('name' => 'mymodule'); $ViewList = array(); $ViewList['myview'] = array( 'script' => 'view.php', 'params' => array(), 'functions' => array( 'myfunction' ) ); $Language = array( 'name'=> 'Language', 'values'=> array(), 'path' => 'classes/', 'file' => 'ezcontentlanguage.php', 'class' => 'eZContentLanguage', 'function' => 'fetchLimitationList', 'parameter' => array( false ) ); $FunctionList['myfunction'] = array('Language' => $Language);
Nous disons ici à eZ Publish que myfunction possède une limitation du nom de Language et dont il faut aller chercher la liste des valeurs possibles via la méthodeeZContentLanguage::fetchLimitationList(), avec le paramètre false. Il s'agit simplement d'une bien vieille manière d'appeler une fonction de callback datant probablement des premières releases d'eZ Publish 3 (souvenez-vous des premières versions de PHP4 et de toutes ses limitations). Pour les curieux, tout se joue dans la méthode eZPolicyLimitation::allValuesAsArrayWithNames(), à partir de la ligne 249 (dans un eZ Publish 4.3.0).
Nous appelons ici une classe du kernel pour remplir notre tableau de limitation, mais il est bien sûr possible d'utiliser une classe se trouvant dans une extension. Cependant, le système d'autoload de classes n'est pas utilisé ici et un bon vieil include_once est effectué en backend. Aussi, afin d'utiliser une classe se situant dans une extension, il est nécessaire de rajouter une autre clé à notre tableau $Language :
$Language = array( 'name' => 'Language', 'values' => array(), 'extension' => 'myextension', 'path' => 'classes/', 'file' => 'myclass.php', 'class' => 'MyClass', 'function' => 'fetchLanguageLimitationList', 'parameter' => array() );
De cette façon, la classe extension/myextension/classes/myclass.php sera inclue.
Mais que doit retourner ma méthode MyClass:fetchLanguageLimitationList() ? Un petit coup d'oeil à eZContentLanguage::fetchLimitationList() nous montre qu'il doit s'agir d'un tableau simple dont chaque entrée est elle-même un tableau associatif contenant les clés id et name.
- id sera la valeur enregistrée dans la base de données pour la limitation sur la politique de sécurité
- name sera simplement le libellé affiché pour la sélection dans le Backoffice.
Voici donc à quoi devra ressembler notre classe MyClass :
class MyClass { /** * Fetches the array with names and IDs of the languages used on the site. This method is used by the permission system. * * @return Array with names and IDs of the languages used on the site. * @static */ public static function fetchLanguageLimitationList() { $langList = eZINI::instance( 'site.ini' )->variable( 'RegionalSettings', 'SiteLanguageList' ); $aResult = array(); foreach($langList as $lang) { if($lang) { $aResult[] = array( 'id' => $lang, 'name' => $lang ); } } return $aResult; } }
Contrôler les accès dans notre module
Maintenant que les limitations sont définies, il reste cependant nécessaire de filtrer les accès à notre module en fonction des droits assignés à tel ou tel utilisateur. En effet, ce contrôle est effectué dans index.php pour le module content, et uniquement pour celui-ci. Nous sommes donc obligés de faire le gendarme nous-mêmes (ce point mérite d'ailleurs d'être optimisé pour les versions futures d'eZ Publish. Pour Fuji peut-être ?).
Tirer partie d'eZJSCore
Le contrôle manuel des limitations en utilisant le framework peut s'avérer un véritable chemin de croix tellement le système est complexe. J'ajouterais par ailleurs qu'il ne s'agit pas de la partie la plus propre du CMS et qu'un peu de nettoyage ne lui ferait pas de mal ! Heureusement, les développeurs Łukasz Serwatka et Andrè Rømcke ont implémenté dans l'extension eZJSCore une méthode de contrôle d'accès simplifiée sous la forme d'un opérateur de template. Cette extension faisant désormais partie de la distribution de base d'eZ Publish, il serait dommage de s'en priver !
Voici donc la meilleure manière de procéder :
extension/myextension/modules/mymodule/myview.php
$userHasAccess = ezjscAccessTemplateFunctions::hasAccessToLimitation( 'mymodule', 'myfunction' ); // Returns a boolean for current user
Récupérer la liste des limitations pour l'utilisateur courant
Malheureusement, eZJSCore ne possède pas de méthode permettant de récupérer les limitations disponibles pour l'utilisateur courant, ce qui peut être pourtant utile pour afficher par exemple une liste déroulante contenant les limitations accordées à l'utilisateur (dans notre cas, les langues disponibles).
Pour cela, il vous faudra écrire une méthode retournant ces limitations de manière simplifiée. En effet, la classe eZUser dispose de la méthode hasAccessTo() mais ce qu'elle retourne est absolument imbitable et demande à être fortement simplifié. Nous allons donc écrire une méthode complémentaire nous retournant des limitations simplifiées.
class MyClass { /** * Shorthand method to check user access policy limitations for a given module/policy function. * Returns the same array as eZUser::hasAccessTo(), with "simplifiedLimitations". * 'simplifiedLimitations' array holds all the limitations names as defined in module.php. * If your limitation name is not defined as a key, then your user has full access to this limitation * @param string $module Name of the module * @param string $function Name of the policy function ($FunctionList element in module.php) * @return array */ public static function getSimplifiedUserAccess( $module, $function ) { $user = eZUser::currentUser(); $userAccess = $user->hasAccessTo( $module, $function ); $userAccess['simplifiedLimitations'] = array(); if( $userAccess['accessWord'] == 'limited' ) { foreach( $userAccess['policies'] as $policy ) { foreach( $policy as $limitationName => $limitationList ) { foreach( $limitationList as $limitationValue ) { $userAccess['simplifiedLimitations'][$limitationName][] = $limitationValue; } $userAccess['simplifiedLimitations'][$limitationName] = array_unique($userAccess['simplifiedLimitations'][$limitationName]); } } } return $userAccess; } }
Cette méthode nous retourne un tableau contenant le résultat de eZUser::hasAccessTo(), complété d'une clé simplifiedLimitations. Cette dernière est également un tableau contenant quant à lui les précieuses limitations.
Dans notre exemple, pour un utilisateur auquel nous aurions affecté une limitation Language autorisant uniquement fre-FR et eng-GB, ce tableau contiendrait :
$limitations = MyClass::getSimplifiedUserAccess( 'mymodule', 'myfunction' ); print_r( $limitations['simplifiedLimitations'] ); // Result Array ( [Language] => Array ( [0] => fre-FR [1] => eng-GB ) )
Dans notre module où nous devons afficher une liste déroulante des langues autorisées, nous aurions donc :
extension/myextension/modules/mymodule/myview.php
$tpl = eZTemplate::factory(); // Template init – from 4.3.0 $authorizedLang = eZINI::instance('site.ini')->variable( 'RegionalSettings', 'SiteLanguageList' ); // Default is all languages $limitations = MyClass::getSimplifiedUserAccess( 'mymodule', 'myfunction' ); if( isset( $limitations['simplifiedLimitations']['Language'] ) ) // Found limitations on language. These will be the only available in the dropdown menu $authorizedLang = $limitations['simplifiedLimitations']['Language']; $tpl->setVariable( 'languages', $authorizedLang ); $Result['content'] = $tpl->fetch( 'design:mydesignsubdir/myview.tpl' );
extension/myextension/design/standard/templates/mydesignsubdir/myview.tpl
<select name="LanguageSelection"> {foreach $languages as $language} <option value=”{$language}”>{$language}</option> {/foreach} </select>
Conclusion
En résumé, mettre en oeuvre des limitations pour des politiques de sécurité au sein de modules personnalisés dans eZ Publish n'est pas une mince affaire. A titre personnel, il m'aura fallu plusieurs jours de fouille dans le kernel et beaucoup de patience pour comprendre les mécanismes des politiques de sécurité et ainsi vous exposer ce tutoriel.
En outre et à la lumière de ce qui précède, il est clair que ce système nécessiterait un sérieux rafraîchissement pour les prochaines versions d'eZ Publish... La roadmap de Fuji est-elle toujours ouverte ? ;-)
Je tiens particulièrement à remercier Nicolas Pastorino , Damien Pobel et André Rømcke qui ont largement contribué à me mettre sur la voie :-).
Cadeau bonus
Pour tous ceux qui ont eu le courage de lire ce long billet jusqu'au bout et qui souhaitent savoir comment faire pour appliquer les règles de sécurité sur les onglets dans le nouveau Backoffice (eZ Publish 4.3.0 et supérieur), voici comment faire :
extension/myextension/settings/menu.ini.append.php
<?php /* #?ini charset="utf-8"? [NavigationPart] Part[mynavigationpart]=My NavigationPart description [TopAdminMenu] Tabs[]=mytab [Topmenu_mytab] NavigationPartIdentifier=mynavigationpart Name=INI Config Tooltip=My Tooltip URL[] URL[default]=mymodule/myview Enabled[] Enabled[default]=true Enabled[browse]=false Enabled[edit]=false Shown[] Shown[default]=true Shown[navigation]=true Shown[browse]=false # Ajouter simplement le controle d'acces pour la fonction par defaut de votre module PolicyList[]=mymodule/myfunction */ ?>
Enjoy !
Commentaires
plaque psoriasis (par plaque psoriasis)
CBSE RESULTS (par CBSE RESULTS)
Education (par thomasedison)
likes (par how to gain followers on instagram)
Login (par q)
Kingroot (par Kingroot Apk)
CBSE RESULT 2017 (par CBSE RESULT 2017)
download videroder latest app (par download videroder latest app)
rolex replca (par sdjj@mail.com)
apk download (par apk download)
BMI CALCULATOR (par 1782329@gmail.com)
Assignmentinc (par Assignmentinc)
MBA Project Help (par MBA Project Help)
C Programming Project Help (par C Programming Project Help)
Content Creation Service (par Content Creation Service)
java homework assignments (par java homework assignments)
Law Assignment Help Assistance (par Law Assignment Help Assistance)
Psychology Assignment Help Assistance (par Psychology Assignment Help Assistance)
Buy Coursework Assignment Help (par Buy Coursework Assignment Help)
Finance Assignment (par Finance Assignment)
Biology Assignment Help Service (par Biology Assignment Help Service)
sprint corporate (par sprint corporate)
tnks (par تور ارمنستان)
qswq (par qwwsq)
Cool (par Anna)
Thanks to the author! (par Mark)
Help (par write my dissertation)
UFC 212 (par UFC 212)
Thanks to the author! (par Anna)
www.gmail.com (par rahul)
IMO for PC (par Download IMO for PC )
https://www.sitewired.com/ (par Loard)
Loard smith (par https://www.sitewired.com/)
merci (par Nona)
www.essaylabs.co.uk (par www.essaylabs.co.uk)
Essay Mall (par Essay Mall)
www.essayvalley.co.uk (par www.essayvalley.co.uk)
Buy an Essay (par Buy an Essay )
Cristina aarora (par Write My Essay-Essay Spot)
Euricana Ciara (par Write My Essay for Me)
Programming Computer Network (par Programming Computer Network)
Do MY Computer Science Assignments (par Do MY Computer Science Assignments)
Thank you for taking (par Piggy Boom Hack)
Python Online Programming Help (par Python Online Programming Help)
Accounting Assignment Writing Service (par Accounting Assignment Writing Service)
Take My Online Exam For Me (par Take My Online Exam For Me)
Medical Thesis Writing Service (par Medical Thesis Writing Service)
avanuweb max (par avanuweb)
Mod Apk (par Real Mod Apk)
Mod Apk (par Hacked Apk)
Notary Seals,Notary Stamps and Notary Supplies (par prestodirect)
Stats Assignment Help (par Stats Assignment Help)
Social Media Advertising Agency (par Social Media Advertising Agency)
Operations Management Help (par Operations Management Help)
Technical Support (par Jason Borne)
Printer (par hp printer tech support)
replique montre (par gesage)
replique montre (par replique montre)
replique montre de luxe (par replique montre de luxe)
Solidworks Assignment Help (par Solidworks Assignment Help)
Take My Online Exam For Me (par Take My Online Exam For Me)
re (par Neil)
hgf (par tfh)
playstore apk (par playstore apk)
replicas relojes (par replicas relojes)
tas (par hack gta)
Pro Kabaddi (par Vivo Pro Kabaddi Live)
gta 5 hacks (par Thaddeus)
Rudolf (par gta 5 hacks)
Bryce (par gta 5 online hack)
Brion (par gta 5 online hacks)
Valentine (par gta 5 online hacks)
Mervin (par gta 5 online hacks)
Darcy (par gta 5 online hacks)
Abel (par gta 5 hacks)
Elvin (par gta 5 hacks)
Bruce (par gta 5 hacks)
gta 5 hacks (par gta 5 hacks)
gta 5 cheat (par gta 5 cheat)
gta 5 cheats (par gta 5 cheats)
gta 5 online money generator (par gta 5 online money generator)
gta 5 hacks (par gta 5 hacks)
gta 5 hack (par gta 5 hack)
gta 5 hacks (par gta 5 hacks)
gta 5 hacks (par gta 5 hacks)
Randolph (par gta 5 hacks)
Austin (par gta 5 mod menu)
gta 5 online hack (par gta 5 online hack)
Raynard (par gta 5 online hack)
kristofer kihn (par kristofer kihn)
comptia a+ training london (par comptia a+ training london)
Cyber security training London (par Cyber security training London)
Yousuf Media (par Yousuf Media)
excel vba training london (par excel vba training london)
java training london (par java training london)
comptia a+ training london (par comptia a+ training london)
ccnp training london (par ccnp training london)
mcse training (par mcse training)
cyber security training (par cyber security training)
Sacramento property attorneys (par Sacramento property attorneys)
christopher boots replica (par christopher boots replica)
cheap smartphones (par cheap smartphones)
good one... (par source link)
Python Assignment Help Service (par Python Assignment Help Service)
AutoCadHelp (par AutoCadHelp)
CaseStudy (par CaseStudy)
家庭作业写作帮助 (par 家庭作业写作帮助)
Smart Phones Land (par Smart Phones Land)
asphelponline.com (par asphelponline.com)
Case Solution (par Case Solution)
state bank login (par state bank login)
bob direct (par bob direct)
epfo (par epfo)
http://www.boitutorial.co.in (par http://www.boitutorial.co.in)
gst login page (par gst login page)
sbi online (par sbi online)
passport login (par passport login)
pnb net banking login (par pnb net banking login)
epfo login (par epfo login)
e aadhar (par e aadhar)
idbi net banking login (par idbi net banking login)
up scholarship status (par up scholarship status)
sol du (par sol du)
Shower Curtains (par Shower Curtains)
LG G7 release date (par LG G7 release date)
LG G7 release date (par LG G7 release date)
192.168.l.254 (par Apple201@quickmailserver.com)
Rfderpol (par 192.168.l.254)
bigo live pc (par bigo live pc)
rosa090817@gmail.com (par rosa leah)
tuto (par agence web dijon netref)
Hire Experts For Getting Best Assignment Assistance (par Hire Experts For Getting Best Assignment Assistance)
sdf (par sdfsd)
sdfs (par sdfsdf)
This is the right web site (par 192.168.1.1)
Looking through (par Essay Help)
ASP Assignment Help (par ASP Assignment Help)
Case Analysis (par Case Analysis)
sa (par sa)
Thanks (par Escorts Service in Gurgaon)
Shayne (par gta 5 online hack)
gta 5 online hack (par gta 5 online hack)
Usvpeptides (par grishma)
gta 5 online hack (par gta 5 online hack)
gta 5 online hack (par gta 5 online hack)
gta 5 online hack (par gta 5 online hack)
gta 5 online hack (par gta 5 online hack)
newone (par zakir95)
Insurance Austin (par Insurance Austin)
suject (par nom)
Sarah (par gta 5 hack)
obat perkasa (par cara menurunkan berat badan)
haiwongroup7 (par cara membesarkan alat vital pria dengan tangan)
Tiffany (par generate money gta 5)
Julia (par gta 5 hack)
Urly (par generate money gta 5)
Janet (par generate money gta 5)
Stephanie (par more info about gta 5 hack here)
Jeremy (par generate money gta 5)
Amber (par gta 5 cheats)
Eldridge (par gta 5 money generator)
Tim (par download gta 5)
Sandra (par more info about gta 5 hack here)
Amber (par gta 5 hack)
Michael (par generate money gta 5)
Michael (par more info about gta 5 hack here)
Heidi (par gta 5 money generator)
Lori (par gta 5 hack)
Stephanie (par gta 5 cheats)
Suzanne (par gta 5 money hacks)
Jim (par gta 5 money generator)
Asauni (par more info about gta 5 hack here)
Jessica (par gta 5 generate money)
Jesus (par gta 5 money cheat)
Facing Common Issues Related to Gmail Account. (par Nancy Hess)
Sherlock (par gta 5 rp hack)
Sandy (par generate money gta 5)
best gold investment companies (par best gold investment companies)
Bali Hut DIY kit (par Bali Hut DIY kit)
bookedhire stickers (par bookedhire stickers)
bisnes ebay (par bisnes ebay)
gigolo grosseto (par LinkerSEO)
Andrew (par gta 5 money cheat)
Custom Essay Help UK (par WilliamVRiley@gmail.com)
hr (par myhr cvs login)
Essay Service UK (par Essay Service UK)
Online Essay Help UK (par Online Essay Help UK)
Essay Service (par Essay Service)
Thanks (par Nono)
Kelly (par gta 5 money generator online)
Danielle (par gta 5 money generator online)
Daisy (par 420 clothing indonesia)
Kevin (par 420 clothing brand)
Ashanti (par 420 clothing store)
Marie (par 420 clothing store)
Arianna (par 420 clothing brand)
Josh (par generate money gta 5)
Amie (par gta 5 money generator)
Melissa (par gta 5 hack)
April (par gta 5 hack)
kenny pest control (par john davidson)
Rebecca (par gta 5 money cheat)
Sherry (par gta 5 money hack)
Mari (par gta 5 money hack)
Ronnie (par gta 5 money generator)
Lynda (par kush cloting)
Dawn (par kush cloting)
Lean (par kush cloting)
Tom (par kush cloting)
HBR Case Analysis (par HBR Case Analysis)
Click Here (par Click Here)
Gurgaon Escorts (par Gurgaon Escorts)
sdfsd (par sdfsd)
nana na (par ksaki@shaj.com)
chiropody cardiff (par minnalawrence@gmail.com)
Electronics Engineering Assignment Help (par Electronics Engineering Assignment Help)
SPSS Assignment Help (par SPSS Assignment Help)
Konveksi Tas Workshop (par Konveksi Tas Workshop)
manfaat qnc jelly gamat (par manfaat qnc jelly gamat)
luvmygyspy.blogspot.com/ (par luvmygyspy.blogspot.com/)
men hoodies (par men hoodies)
mens jackets (par mens jacket)
Bobby Backpack (par New York)
Samir Tabar (par Admin)
nice post (par coursework writing service)
manfaat qnc jelly gamat untuk kesehatan (par sefe@tsdf.com)
USAassignment Help | Toll Free 1-844-752-3111 (par Rick Smith)
Online Programming Project Help (par Online Programming Project Help)
Can Someone Do my Assignment (par Can Someone Do my Assignment)
Pay to DO my Research Paper (par Pay to DO my Research Paper)
Pay to Do my Assignment (par Pay to Do my Assignment)
Bitcoin (par Bitcoin)
ylq (par ylq)
Proessay.co.uk (par Write my Essay UK)
Ear Plugs for Swimming (par Ear Plugs for Swimming)
For Student Assignment Help (par Buy Case Study)
Free crack software download (par SAM broadcaster Crack)
Programming Help (par hk73895@gmail.com)
Xavier (par great article)
security system in delhi (par riya)
Led Panel Lights (par Led Panel Lights)
fgdgdf (par gfg@dfx.com)
Accounting Assignments (par Accounting Assignments)
Capstone Project Writing Service (par Capstone Project Writing Service)
aa (par aa)
Thanks (par Yayan)
Thanks (par Yayan)
Online Case Study Help (par lilyjacob987@gmail.com)
Case Study Help Services (par Case Study Help Services)
Lillian Ethan (par Actuary Homework Help)
Sophia Ethan (par Online Marketing Assignment Help)
xbox customer support (par xbox customer support)
My View (par Essay Writing Service UK Online - DoneEssays)
PA system in dubai (par PA system in dubai)
PA system in dubai (par PA system in dubai)
United States (par 10001)
water damage cleanup Atlanta (par Somya Florence)
Easy SEO Tricks (par Social Bookmarking Site List)
qqq (par qqq)
Electrical Engineering Project Help (par Electrical Engineering Project Help)
Xbox Customer Service (par Xbox Customer Service )
thaks information (par ikat pinggang)
Kolkata Escorts (par kolkataqueen17@gmail.com)
Kolkata Escorts (par mybabes.in16@gmail.com)
How to Solve email signing in and connectivity problems +1-844-801-6776 (par Alessia Fogorly)
Help With Marketing Homework (par Help With Marketing Homework)
Delhi Escorts (par Escorts in Delhi)
Delhi Escorts (par riyachaudhary.com@gmail.com)
prowa (par produk walatra)
Do My Matlab Homework (par Do My Matlab Homework)
RRB (par RRB Gorakhpur)
reader (par mitchell)
saraaaa (par sara)
NIce Comment (par Life Experience Degree)
Excellent Concept (par Life Experience Degrees)
GARMIN EXPRESS SUPPORT EMBEDDED WITH UNIQUE FEATURES|1-800-977-6442 (par Alessia Fogorly)
Thanks (par guide automobile)
JUAL OBAT PEMBESAR ALAT VITAL PRIA (par REVA)
JUAL OBAT PENGGUGUR KANDUNGAN KUAT (par YUNITA)
Norton Setup install | Norton.com/setup.com (par Norton Setup)
escort service in Mumbai (par Mumbai escorts service)
Anjali Ahuja (par Mumbai Escorts)
Pooja Nehwal (par Anjali Ahuja)
www.webroot.com/safe (par dileep )
Thanks (par nourriture bio)
cara mengeluarkan darah haid yang tidak keluar (par puspitaresna50@gmail.com )
Good post (par assignment helper online)
Real Estate and Property (par shwetha)
great (par Business iPad Hire)
asiongtoko@gmail.com (par Obat Kuat Jogja)
Obat luka bakar knalpot agar cepat kering (par puspitaresna50@gmail.com )
Memorial Day 2018 (par AMAN)
MagicJack Support Number (par MagicJack Support Number)
Obat Herbal (par jAMBROG)