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)

This blog is great i love reading your posts. Keep up the great work! You know, a lot of people are hunting around for this info, you could help them greatly.


CBSE RESULTS (par CBSE RESULTS)

CBSE declared its <a href="https://cbseresult2016-nic.in/">CBSE RESULTS</a> and there's jubilation and remorse all around depending upon how well someone has been able to score.


Education (par thomasedison)

It took me perpetually to realize what I should do likewise. I knew there were journeys, yet couldn't discover how to put a guide marker on the objective area.


likes (par how to gain followers on instagram)

Great post.


Login (par q)

Thanks for sharing such information! I'll come back to this page again.


Kingroot (par Kingroot Apk)

See how to root conveniently and quickly via Kingroot APK. Install it instantly to your devices, phones and tablets. No PC required. Download ...


CBSE RESULT 2017 (par CBSE RESULT 2017)

thanks for the nice website keep it up
<a href="http://www.cbseboardresultnic.in/...s-2017-with-marks.html">cbse 10th result 2017</a>
<a href="http://www.cbseboardresultnic.in/...s-2017-with-marks.html">cbse result</a>


download videroder latest app (par download videroder latest app)

Videoder is an android app that lets you download music and videos from youtube, facebook, instagram, vimeo, dailymotion etc for free. http://illusionsofwar.org/the-fas...l-to-download-youtube-videos-on-mac/


rolex replca (par sdjj@mail.com)

that tool the texture of the http://watches.rolexreplicauk.co.uk replica rolex; 12 o'clock position is now more retro, completely like Antique "B-UHR" http://www.replicasonline.co.uk replica watches uk, there is http://www.mmwatches.co.uk replica watches uk a bar when the standard, the following drape a triangle and two two garden points (all luminous coating), compared to the average 12 points to eliminate the big bar when the standard.


apk download (par apk download)


Download mod apkGames and modded apps here at apkreal.com for Free.


BMI CALCULATOR (par 1782329@gmail.com)

Very interesting set out the theme!!learned a lot for myself! thank you! http://calculatorbmi.org


Assignmentinc (par Assignmentinc)

Thanks for Nice and Informative Post. This article is really contains lot more information about This Topic.
https://www.assignmentinc.com


MBA Project Help (par MBA Project Help)

Hi buddy, your blog' s design is simple and clean and i like it. Your blog posts about Online Dissertation Help are superb. Please keep them coming. Greets!!


C Programming Project Help (par C Programming Project Help)

Good way of telling, good post to take facts regarding my presentation subject matter, which i am going to deliver in my college


Content Creation Service (par Content Creation Service)

My friend recommended this blog and he was totally right keep up the fantastic work!


java homework assignments (par java homework assignments)

This is really a great stuff for sharing. Keep it up .Thanks for sharing.


Law Assignment Help Assistance (par Law Assignment Help Assistance)

This is great information for students. This article is very helpful i really like this blog thanks. I also have some information relevant for online dissertation help.


Psychology Assignment Help Assistance (par Psychology Assignment Help Assistance)

Get the dissertation writing service students look for these days with the prime focus being creating a well researched and lively content on any topic.


Buy Coursework Assignment Help (par Buy Coursework Assignment Help)

Well thanks for posting such an outstanding idea. I like this blog & I like the topic and thinking of making it right.


Finance Assignment (par Finance Assignment)

I appreciate your efforts in preparing this post. I really like your blog articles.


Biology Assignment Help Service (par Biology Assignment Help Service)

Amazing article thanks or sharing..


sprint corporate (par sprint corporate)

Unfortunately, I can not help you! I'm not good at this. Sorry!((


tnks (par تور ارمنستان)

بیشتر راجع به ارمنستان مطالعه کنید و ممنون از سایت خوبتون


qswq (par qwwsq)


Il existe de nombreuses causes de faible estime de soi, et certaines personnes aiment utiliser une norme comme objectif trop élevé, de sorte qu'ils ne parviennent pas à répondre aux exigences en état d'échec


Cool (par Anna)

Excellent article, read in one breath! Thank you!
http://eyebrowthreadinginfo.com


Thanks to the author! (par Mark)

Very easy to understand the material! Thanks to the author!
http://maddenmobilhack.com


Help (par write my dissertation)

In fact, most of the kernel's modules can restrict access through security policies that can be attributed to users or groups of users.


UFC 212 (par UFC 212)

https://212-ufc.net/
UFC 212 Fight Card, Schedule, Date & Must-See Details. Watch UFC 212 Live Streaming Free Online. Aldo vs Holloway UFC Fight online preview.


Thanks to the author! (par Anna)

Very easy to understand the material! Thanks to the author!
http://calculatorbmi.org/macro-calculator


www.gmail.com (par rahul)

Here is how to reset your
<a href="https://igmailsigninn.com/gmail-c...rd/">www.gmail.com</a> password.


IMO for PC (par Download IMO for PC )

How to install IMO on Pc free, Download IMO for Pc Windows 7/8 and 10 and Enjoy this Amazing IMO app.100% safe and virus free. More than 12454 downloads this month. Download BlueStacks App.


https://www.sitewired.com/ (par Loard)

The first essential ingredient to a highly effective and attractive web presence is a business website.


Loard smith (par https://www.sitewired.com/)

What makes web surfers to sit down and take notice of a website? Simply, a terrific web design and perfectly scalable site which is easy to navigate. Certainly, these core features are found to be missing in many websites and hence they do not attract much traffic and never realize their potential.


www.essaylabs.co.uk (par www.essaylabs.co.uk)

Bassist Vincent Price has sufficient energy to sparkle on the track amid the stop/begin riffs in the verse, in spite of the fact that Price's low end can be felt on Bloodlust's total.


Essay Mall (par Essay Mall)

I can plainly observe lines and columns of sharp teeth. I am swimming amidst the Belizian sea with not a single land to be seen and just blue water underneath me, confronted by Barracuda.


www.essayvalley.co.uk (par www.essayvalley.co.uk)

The primary office, in which Frank scholarly information about wine, and where at 19 years old years got the wine bug, an inn school in the Netherlands.


Buy an Essay  (par Buy an Essay )

This is truly an extraordinary stuff for sharing. A debt of gratitude is in order for sharing.


Cristina aarora (par Write My Essay-Essay Spot)

I for one like your post; you have shared great bits of knowledge and encounters. Keep it up.


Euricana Ciara (par Write My Essay for Me)

Hello there pal, your blog' s configuration is basic and clean and i like it. Your blog entries about Online written work Help are radiant. It would be ideal if you keep them coming. Welcomes!


Programming Computer Network (par Programming Computer Network)

Science Channel’s are giving a complete knowledge to its viewers about every thing students write done dissertation on this subjects and show its importance.


Do MY Computer Science Assignments (par Do MY Computer Science Assignments)

Good way of telling, good post to take facts regarding my presentation subject matter, which i am going to deliver in my college


Thank you for taking (par Piggy Boom Hack)

Thank you for taking the time to publish this information very useful!


Python Online Programming Help (par Python Online Programming Help)

I appreciate this work amazing post for us I like it.


Accounting Assignment Writing Service (par Accounting Assignment Writing Service)

by visiting this site I found cool stuff here keep it up.


Take My Online Exam For Me (par Take My Online Exam For Me)

Well thanks for posting such an outstanding idea. I like this blog & I like the topic and thinking of making it right.


Medical Thesis Writing Service (par Medical Thesis Writing Service)

They are not able to finish the writing assignments on time. For some students, writing any writing assignments is able to waste their time


Mod Apk (par Real Mod Apk)

Stats Assignment Help (par Stats Assignment Help)

Well thanks for posting such an outstanding idea. I like this blog & I like the topic and thinking of making it right.


Social Media Advertising Agency (par Social Media Advertising Agency)

I appreciate this work amazing post for us I like it.


Operations Management Help (par Operations Management Help)

This is really a great stuff for sharing. Thanks for sharing.


replique montre (par gesage)

replique montre france


replique montre (par replique montre)

replique montre france


replique montre de luxe (par replique montre de luxe)

Les répliques Rolex http://www.frrepliquemontre.net répliques de montres Milgauss ont des lunettes en cristal de saphir vert unique qui sont l'invention pionnière. Le verre correspond parfaitement au cadran bleu électrique et à l'emblème icône de l'éclair. Le boîtier de montre est également en acier 904L de haute qualité anti-corrosion et facile à polir.


Solidworks Assignment Help (par Solidworks Assignment Help)

Hi buddy, your blog' s design is simple and clean and i like it. Your blog posts about Online Dissertation Help are superb. Please keep them coming. Greets!!


Take My Online Exam For Me (par Take My Online Exam For Me)

Pretty helpful material, much thanks for this article


re (par Neil)

This is lovely post and I've bookmarked this page.<a href="http://www.iphone7buzz.com/iphone-8/">iPhone 8 Release date</a>


playstore apk (par playstore apk)

Play Store APK: Download google Playstore apk from here. Google Play Store apk/app is the application that makes all android phones and other phones worth having


replicas relojes (par replicas relojes)

Las ediciones anteriores se han visto entre los http://www.replicadereloj.es/relojes/rolex ganadores caracteres de calibre internacional como la instalación http://www.replicadereloj.es/relojes/omega de Técnico Pietro Scalia (ganador del Oscar, tanto en 1992 y en 2002), http://www.replicadereloj.es/relojes/breitling el director de fotografía de “Life of Pi” Claudio Miranda


tas (par hack gta)

visit us


Pro Kabaddi (par Vivo Pro Kabaddi Live)

Get all the Vivo Pro Kabaddi Auction 2017 Live Serial playtime schedule.With the addition of new teams of Pro Kabaddi is gearing up to surpass other .


gta 5 hacks (par Thaddeus)

This excellent website really has all of the information and facts I wanted about this subject and didn’t know who to ask.


Rudolf (par gta 5 hacks)

This page certainly has all of the information and facts I wanted concerning this subject and didn’t know who to ask.


Bryce (par gta 5 online hack)

This web site definitely has all of the info I wanted concerning this subject and didn’t know who to ask.


Brion (par gta 5 online hacks)

This page definitely has all of the information and facts I wanted concerning this subject and didn’t know who to ask.


Valentine (par gta 5 online hacks)

This website truly has all the information and facts I wanted concerning this subject and didn’t know who to ask.


Mervin (par gta 5 online hacks)

This website certainly has all the info I needed concerning this subject and didn’t know who to ask.


Darcy (par gta 5 online hacks)

This site certainly has all the information I needed about this subject and didn’t know who to ask.


Abel (par gta 5 hacks)

This excellent website definitely has all of the info I wanted about this subject and didn’t know who to ask.


Elvin (par gta 5 hacks)

This web site certainly has all of the info I wanted about this subject and didn’t know who to ask.


Bruce (par gta 5 hacks)

This web site really has all of the information I needed about this subject and didn’t know who to ask.


gta 5 hacks (par gta 5 hacks)

This excellent website really has all of the information and facts I wanted concerning this subject and didn’t know who to ask.


gta 5 cheat (par gta 5 cheat)

This web site certainly has all of the information I wanted about this subject and didn’t know who to ask.


gta 5 cheats (par gta 5 cheats)

This web site truly has all the information and facts I needed about this subject and didn’t know who to ask.


gta 5 online money generator (par gta 5 online money generator)

This excellent website certainly has all of the information and facts I needed about this subject and didn’t know who to ask.


gta 5 hacks (par gta 5 hacks)

This excellent website really has all the information I needed concerning this subject and didn’t know who to ask.


gta 5 hack (par gta 5 hack)

This site really has all of the information and facts I wanted concerning this subject and didn’t know who to ask.


gta 5 hacks (par gta 5 hacks)

This web site truly has all the information and facts I wanted concerning this subject and didn’t know who to ask.


gta 5 hacks (par gta 5 hacks)

This web site truly has all the info I wanted concerning this subject and didn’t know who to ask.


Randolph (par gta 5 hacks)

This web site certainly has all of the information and facts I wanted about this subject and didn’t know who to ask.


Austin (par gta 5 mod menu)

This web site really has all the information and facts I wanted about this subject and didn’t know who to ask.


gta 5 online hack (par gta 5 online hack)

This website really has all the information and facts I needed about this subject and didn’t know who to ask.


Raynard (par gta 5 online hack)

This web site really has all of the information I needed concerning this subject and didn’t know who to ask.


kristofer kihn (par kristofer kihn)

Get the dissertation writing service students <a href="https://www.progassignments.com/&...//www.progassignments.com/</a> look for these days with the prime focus being creating a well researched and lively content on any topic.


comptia a+ training london (par comptia a+ training london)

This is an awesome motivating article.I am practically satisfied with your great work.


Cyber security training London (par Cyber security training London)

So kindly update this ever for us.


Yousuf Media (par Yousuf Media)

Great info! I recently came across your blog and have been reading along. I thought I would leave my first comment. <a href="https://www.yousufmedia.com/"...tps://www.yousufmedia.com/</a> I don’t know what to say except that I have


excel vba training london (par excel vba training london)

I think this is the most suitable way to do it effectively.


java training london (par java training london)

The blog and data is excellent and informative as well


comptia a+ training london (par comptia a+ training london)

This website and I conceive this internet site is really informative ! Keep on putting up!


ccnp training london (par ccnp training london)

I don’t think many of websites provide this type of information.


mcse training (par mcse training)

Mmm.. good to be here in your article or post, whatever, I think I should also work hard for my own website like I see some good and updated working in your site.


cyber security training (par cyber security training)

Wonderful blog post. This is absolute magic from you! I have never seen a more wonderful post than this one. You've really made my day today with this. I hope you keep this up!


Sacramento property attorneys (par Sacramento property attorneys)

Very nice article, I enjoyed reading your post, very nice share.


christopher boots replica (par christopher boots replica)

I have read your article; it is very informative and helpful for me. I admire the valuable information you offer in your articles. Thanks for posting it.


cheap smartphones (par cheap smartphones)

nice blog I get most important thinkgs from your informative blog, you can also visit my site which is about smartphones


good one... (par source link)

thank you for sharing this article.


Python Assignment Help Service (par Python Assignment Help Service)

This is great information for students. This article is very helpful i really like this blog thanks. I also have some information relevant for online dissertation help.


AutoCadHelp (par AutoCadHelp)

This is really great work. Thank you for sharing such a good and useful information here in the blog for students.


CaseStudy (par CaseStudy)

This is really great work. Thank you for sharing such a good and useful information here in the blog for students.


家庭作业写作帮助 (par 家庭作业写作帮助)

这是个非常完美的作品。感谢您在博客上为学生分享如此好的有用的信息。


Smart Phones Land (par Smart Phones Land)

your blog is doing good job and we also providing information of smartphones


asphelponline.com (par asphelponline.com)

Hi buddy, your blog' s design is simple and clean and i like it. Your blog posts about Online writing Help are superb. Please keep them coming. Greets!


Case Solution (par Case Solution)

This post is truly astonishing one! I was pleased to peruse this, all that much valuable.


state bank login (par state bank login)

state bank login


bob direct (par bob direct)

“To educate a person in the mind but not in morals is to educate a menace to society.”


epfo (par epfo)

“I do not think I ever opened a book in my life which had not something to say upon woman's inconstancy. Songs and proverbs, all talk of woman's fickleness. But perhaps you will say, these were all written by men."


http://www.boitutorial.co.in (par http://www.boitutorial.co.in)

"Perhaps I shall. Yes, yes, if you please, no reference to examples in books. Men have had every advantage of us in telling their own story. Education has been theirs in so much higher a degree; the pen has been in their hands. I will not allow books to prove anything.”


gst login page (par gst login page)

“For if you suffer your people to be ill-educated, and their manners to be corrupted from their infancy, and then punish them for those crimes to which their first education disposed them, what else is to be concluded from this, but that you first make thieves and then punish them.”


sbi online (par sbi online)

“We spend the first year of a child's life teaching it to walk and talk and the rest of its life to shut up and sit down. There's something wrong there.”


passport login (par passport login)

“We spend the first year of a child's life teaching it to walk and talk and the rest of its life to shut up and sit down. There's something wrong there.”


pnb net banking login (par pnb net banking login)

“Game shows are designed to make us feel better about the random, useless facts that are all we have left of our education.”


epfo login (par epfo login)

There are two novels that can change a bookish fourteen-year old’s life


e aadhar (par e aadhar)

One is a childish fantasy that often engenders a lifelong obsession with its unbelievable heroes, leading to an emotionally stunted, socially crippled adulthood, unable to deal with the real world. The other, of course, involves orcs."


idbi net banking login (par idbi net banking login)

Education consists mainly of what we have unlearned.”


up scholarship status (par up scholarship status)

Cinema is the ultimate pervert art. It doesn't give you what you desire - it tells you how to desire.


sol du (par sol du)

“Educate a boy, and you educate an individual. Educate a girl, and you educate a community.”


Shower Curtains (par Shower Curtains)

Looking for shower curtains that will look beautiful in your bathrooms without having to worry about costs and durability?


LG G7 release date (par LG G7 release date)

LG G7 has become predictable when it comes to product launching. Now it is time for LG G7 and LG G7 Price. LG G7 release date..


LG G7 release date (par LG G7 release date)

LG G7 has become predictable when it comes to product launching. Now it is time for LG G7 and LG G7 Price. LG G7 release date..


192.168.l.254 (par Apple201@quickmailserver.com)

This is really good information I have visited this blog to read something fresh and I really admire you efforts in doing so.


Rfderpol (par 192.168.l.254)

this is very great and brilliant information


rosa090817@gmail.com (par rosa leah)

thank you for sharing this.It help us to know about HTML.Keep it and go
<a href="http://www.weeweesworld.com" title="Wee Wee's World">ahead.</a>


tuto (par agence web dijon netref)

Merci pour ce tuto il est bien pratique, j'ai pu me débloquer ainsi


Hire Experts For Getting Best Assignment Assistance (par Hire Experts For Getting Best Assignment Assistance)

I fully agree with you. Congratulations on sharing such a detailed post. Many thanks for sharing this. Have a super nice day.


sdf (par sdfsd)

http://beautyglowup.com/ Beauty Tips
http://beautyglowup.com/category/male-enhancement-supplements/ Male Enhancement Supplements
http://beautyglowup.com/category/weight-loss-supplements/ Weight Loss Supplements
http://beautyglowup.com/category/skin-care-products/ Skin Care Products
http://beautyglowup.com/category/hair-care-products/ Hair Care Products

http://beautyglowup.com/detox-and-cleanse-reviews/ Detox and Clease Reviews
http://beautyglowup.com/alpha-prime-elite-the-best-male-enhancement/ Alpha Prime Elite
http://beautyglowup.com/garcinia-pure-pro-weight-loss-that-works/ Garcinia Pure Pro
http://beautyglowup.com/pure-asian-garcinia/ Pure Asian Garcinia
http://beautyglowup.com/buy-garcinia-cambogia Buy Garcinia Cambogia
http://beautyglowup.com/skin-rejuvenator-anti-aging-device/ Skin Rejuvenator
http://beautyglowup.com/hair-loss-treatment-for-men/ Hair Loss Treatment For Men
https://sites.google.com/view/garciniapurepro11

https://javed786.com/muscle-building-foods-gh-advanced-plus/
http://agsdevelopers.com/ Web Development Company
http://agsdevelopers.com/shopify-development/ Shopify Development Services
http://agsdevelopers.com/volusion-development/ Volusion Development Services
http://agsdevelopers.com/magento-development/ Magento Development Services
http://agsdevelopers.com/bigcommerce-development/ BigCommerce Development Services
http://agsdevelopers.com/wordpress-development/ WordPress Development Services
http://www.worldcolumns.com Urdu Columns
http://www.worldcolumns.com/columns/javed-chaudhry/ Javed Chaudhry Columns
http://www.worldcolumns.com/columns/hassan-nisar/ Hassan Nisar Columns
http://www.worldcolumns.com/columns/orya-maqbool-jan/ Orya Maqbool Jan Columns
http://www.worldcolumns.com/columns/rauf-klasra/ Rauf Klasra Columns
http://www.worldcolumns.com/columns/nazeer-naji/ Nazeer Naji Columns
http://www.worldcolumns.com/columns/ayaz-amir/ Ayaz Amir Columns
http://www.worldcolumns.com/columns/haroon-ur-rasheed/ Haroon Rasheed Columns
http://www.worldcolumns.com/columns/saadullah-jan-barq/ Saadullah Jan Barq Columns



sdfs (par sdfsdf)

http://beautyglowup.com/ Beauty Tips
http://beautyglowup.com/category/male-enhancement-supplements/ Male Enhancement Supplements
http://beautyglowup.com/category/weight-loss-supplements/ Weight Loss Supplements
http://beautyglowup.com/category/skin-care-products/ Skin Care Products
http://beautyglowup.com/category/hair-care-products/ Hair Care Products

http://beautyglowup.com/detox-and-cleanse-reviews/ Detox and Clease Reviews
http://beautyglowup.com/alpha-prime-elite-the-best-male-enhancement/ Alpha Prime Elite
http://beautyglowup.com/garcinia-pure-pro-weight-loss-that-works/ Garcinia Pure Pro
http://beautyglowup.com/pure-asian-garcinia/ Pure Asian Garcinia
http://beautyglowup.com/buy-garcinia-cambogia Buy Garcinia Cambogia
http://beautyglowup.com/skin-rejuvenator-anti-aging-device/ Skin Rejuvenator
http://beautyglowup.com/hair-loss-treatment-for-men/ Hair Loss Treatment For Men
https://sites.google.com/view/garciniapurepro11

https://javed786.com/muscle-building-foods-gh-advanced-plus/
http://agsdevelopers.com/ Web Development Company
http://agsdevelopers.com/shopify-development/ Shopify Development Services
http://agsdevelopers.com/volusion-development/ Volusion Development Services
http://agsdevelopers.com/magento-development/ Magento Development Services
http://agsdevelopers.com/bigcommerce-development/ BigCommerce Development Services
http://agsdevelopers.com/wordpress-development/ WordPress Development Services
http://www.worldcolumns.com Urdu Columns
http://www.worldcolumns.com/columns/javed-chaudhry/ Javed Chaudhry Columns
http://www.worldcolumns.com/columns/hassan-nisar/ Hassan Nisar Columns
http://www.worldcolumns.com/columns/orya-maqbool-jan/ Orya Maqbool Jan Columns
http://www.worldcolumns.com/columns/rauf-klasra/ Rauf Klasra Columns
http://www.worldcolumns.com/columns/nazeer-naji/ Nazeer Naji Columns
http://www.worldcolumns.com/columns/ayaz-amir/ Ayaz Amir Columns
http://www.worldcolumns.com/columns/haroon-ur-rasheed/ Haroon Rasheed Columns
http://www.worldcolumns.com/columns/saadullah-jan-barq/ Saadullah Jan Barq Columns



This is the right web site (par 192.168.1.1)

This is the right web site for anybody who wants to understand this topic.


Looking through (par Essay Help)

By and by, it took me a few days of looking through the part and a considerable measure of persistence to comprehend the components of security approaches and subsequently uncover this instructional exercise.
What's more, and in light of the above, unmistakably this framework would require a genuine refreshment for the following forms of eZ Publish.


ASP Assignment Help (par ASP Assignment Help)

I like your article


Case Analysis (par Case Analysis)

This post is truly astonishing one! I was pleased to peruse this, all that much valuable.


sa (par sa)

WebUrl
http://www.ahotwatch.com/A.-Lange-Sohne-a-hot.html
http://www.ahotwatch.com/Arnold-Son-a-hot.html
http://www.ahotwatch.com/Audemars-Piguet-a-hot.html
http://www.ahotwatch.com/Baume-Mercier-a-hot.html
http://www.ahotwatch.com/Bedat-Co-a-hot.html
http://www.ahotwatch.com/Bell-Ross-a-hot.html
http://www.ahotwatch.com/Blancpain-a-hot.html
http://www.ahotwatch.com/Bovet-a-hot.html
http://www.ahotwatch.com/Breguet-a-hot.html
http://www.ahotwatch.com/Breitling-a-hot.html
http://www.ahotwatch.com/B.R.M-a-hot.html
http://www.ahotwatch.com/Bulgari-a-hot.html
http://www.ahotwatch.com/Cartier-a-hot.html
http://www.ahotwatch.com/Casio-a-hot.html
http://www.ahotwatch.com/Chopard-a-hot.html
http://www.ahotwatch.com/Corum-a-hot.html
http://www.ahotwatch.com/de-Grisogono-a-hot.html
http://www.ahotwatch.com/Dior-a-hot.html
http://www.ahotwatch.com/Ebel-a-hot.html
http://www.ahotwatch.com/Franck-Muller-a-hot.html
http://www.ahotwatch.com/Gevril-a-hot.html
http://www.ahotwatch.com/Girard-Perregaux-a-hot.html
http://www.ahotwatch.com/Glashutte-a-hot.html
http://www.ahotwatch.com/Graham-a-hot.html
http://www.ahotwatch.com/Hamilton-a-hot.html
http://www.ahotwatch.com/Harry-Winston-a-hot.html
http://www.ahotwatch.com/Hublot-a-hot.html
http://www.ahotwatch.com/Invicta-a-hot.html
http://www.ahotwatch.com/IWC-a-hot.html
http://www.ahotwatch.com/Jacob-Co-a-hot.html
http://www.ahotwatch.com/Jaeger-LeCoultre-a-hot.html
http://www.ahotwatch.com/Jean-Watches-a-hot.html
http://www.ahotwatch.com/Longines-a-hot.html
http://www.ahotwatch.com/Maurice-Lacroix-a-hot.html
http://www.ahotwatch.com/Michele-a-hot.html
http://www.ahotwatch.com/Montblanc-a-hot.html
http://www.ahotwatch.com/Movado-a-hot.html
http://www.ahotwatch.com/Omega-a-hot.html
http://www.ahotwatch.com/Oris-a-hot.html
http://www.ahotwatch.com/Panerai-a-hot.html
http://www.ahotwatch.com/Parmigiani-a-hot.html
http://www.ahotwatch.com/Patek-Philippe-a-hot.html
http://www.ahotwatch.com/Philip-Stein-a-hot.html
http://www.ahotwatch.com/Piaget-a-hot.html
http://www.ahotwatch.com/Rado-a-hot.html
http://www.ahotwatch.com/R-M-a-hot.html
http://www.ahotwatch.com/Romain-Jerome-a-hot.html
http://www.ahotwatch.com/Roger-Dubuis-a-hot.html
http://www.ahotwatch.com/Rolex-a-hot.html
http://www.ahotwatch.com/Seiko-a-hot.html
http://www.ahotwatch.com/TAG-Heuer-a-hot.html
http://www.ahotwatch.com/Technomarine-a-hot.html
http://www.ahotwatch.com/Tissot-a-hot.html
http://www.ahotwatch.com/Tudor-a-hot.html
http://www.ahotwatch.com/TW-Steel-a-hot.html
http://www.ahotwatch.com/U-Boat-a-hot.html
http://www.ahotwatch.com/Ulysse-Nardin-a-hot.html
http://www.ahotwatch.com/Vacheron-Constantin-a-hot.html
http://www.ahotwatch.com/Wyler-a-hot.html
http://www.ahotwatch.com/Zenith-a-hot.html
http://www.graceful-watches.com
http://www.recommend-watch.com
http://www.shoppedwatches.com
http://www.for-best-watch.com
http://www.watchehot.com
http://www.buy-gifts-watch.com
http://www.luxurious-watch.com
http://www.buynewestwatch.com/
http://www.brandswatchess.com/
http://www.bestqualitywatch.com/
http://www.watchesbeautifully.com/
http://www.watchlowprice.com
http://www.ahotwatch.com/
http://www.watches-selection.com/
http://www.forluxurywatches.com
http://www.nicewatchesshop.com/
http://www.ahotwatch.com/A.-Lange-Sohne-a-hot.html
http://www.ahotwatch.com/Arnold-Son-a-hot.html
http://www.ahotwatch.com/Audemars-Piguet-a-hot.html
http://www.ahotwatch.com/Baume-Mercier-a-hot.html
http://www.ahotwatch.com/Bedat-Co-a-hot.html
http://www.ahotwatch.com/Bell-Ross-a-hot.html
http://www.ahotwatch.com/Blancpain-a-hot.html
http://www.ahotwatch.com/Bovet-a-hot.html
http://www.ahotwatch.com/Breguet-a-hot.html
http://www.ahotwatch.com/Breitling-a-hot.html
http://www.ahotwatch.com/B.R.M-a-hot.html
http://www.ahotwatch.com/Bulgari-a-hot.html
http://www.ahotwatch.com/Cartier-a-hot.html
http://www.ahotwatch.com/Casio-a-hot.html
http://www.ahotwatch.com/Chopard-a-hot.html
http://www.ahotwatch.com/Corum-a-hot.html
http://www.ahotwatch.com/de-Grisogono-a-hot.html
http://www.ahotwatch.com/Dior-a-hot.html
http://www.ahotwatch.com/Ebel-a-hot.html
http://www.ahotwatch.com/Franck-Muller-a-hot.html
http://www.ahotwatch.com/Gevril-a-hot.html
http://www.ahotwatch.com/Girard-Perregaux-a-hot.html
http://www.ahotwatch.com/Glashutte-a-hot.html
http://www.ahotwatch.com/Graham-a-hot.html
http://www.ahotwatch.com/Hamilton-a-hot.html
http://www.ahotwatch.com/Harry-Winston-a-hot.html
http://www.ahotwatch.com/Hublot-a-hot.html
http://www.ahotwatch.com/Invicta-a-hot.html
http://www.ahotwatch.com/IWC-a-hot.html
http://www.ahotwatch.com/Jacob-Co-a-hot.html
http://www.ahotwatch.com/Jaeger-LeCoultre-a-hot.html
http://www.ahotwatch.com/Jean-Watches-a-hot.html
http://www.ahotwatch.com/Longines-a-hot.html
http://www.ahotwatch.com/Maurice-Lacroix-a-hot.html
http://www.ahotwatch.com/Michele-a-hot.html
http://www.ahotwatch.com/Montblanc-a-hot.html
http://www.ahotwatch.com/Movado-a-hot.html
http://www.ahotwatch.com/Omega-a-hot.html
http://www.ahotwatch.com/Oris-a-hot.html
http://www.ahotwatch.com/Panerai-a-hot.html
http://www.ahotwatch.com/Parmigiani-a-hot.html
http://www.ahotwatch.com/Patek-Philippe-a-hot.html
http://www.ahotwatch.com/Philip-Stein-a-hot.html
http://www.ahotwatch.com/Piaget-a-hot.html
http://www.ahotwatch.com/Rado-a-hot.html
http://www.ahotwatch.com/R-M-a-hot.html
http://www.ahotwatch.com/Romain-Jerome-a-hot.html
http://www.ahotwatch.com/Roger-Dubuis-a-hot.html
http://www.ahotwatch.com/Rolex-a-hot.html
http://www.ahotwatch.com/Seiko-a-hot.html
http://www.ahotwatch.com/TAG-Heuer-a-hot.html
http://www.ahotwatch.com/Technomarine-a-hot.html
http://www.ahotwatch.com/Tissot-a-hot.html
http://www.ahotwatch.com/Tudor-a-hot.html
http://www.ahotwatch.com/TW-Steel-a-hot.html
http://www.ahotwatch.com/U-Boat-a-hot.html
http://www.ahotwatch.com/Ulysse-Nardin-a-hot.html
http://www.ahotwatch.com/Vacheron-Constantin-a-hot.html
http://www.ahotwatch.com/Wyler-a-hot.html
http://www.ahotwatch.com/Zenith-a-hot.html
http://www.graceful-watches.com
http://www.recommend-watch.com
http://www.shoppedwatches.com
http://www.for-best-watch.com
http://www.watchehot.com
http://www.buy-gifts-watch.com
http://www.luxurious-watch.com
http://www.buynewestwatch.com/
http://www.brandswatchess.com/
http://www.bestqualitywatch.com/
http://www.watchesbeautifully.com/
http://www.watchlowprice.com
http://www.ahotwatch.com/
http://www.watches-selection.com/
http://www.forluxurywatches.com
http://www.nicewatchesshop.com/


Thanks (par Escorts Service in Gurgaon)

Drinking the love portion with Gurgaon Escorts http://www.24x7girlsservices.in/


Shayne (par gta 5 online hack)

This website really has all the information and facts I needed concerning this subject and didn’t know who to ask.


gta 5 online hack (par gta 5 online hack)

This web site certainly has all the information I needed about this subject and didn’t know who to ask.


gta 5 online hack (par gta 5 online hack)

This website really has all of the information I needed about this subject and didn’t know who to ask.


gta 5 online hack (par gta 5 online hack)

This excellent website definitely has all of the info I needed about this subject and didn’t know who to ask.


gta 5 online hack (par gta 5 online hack)

This site certainly has all of the information I wanted concerning this subject and didn’t know who to ask.


gta 5 online hack (par gta 5 online hack)

This web site really has all the information and facts I needed concerning this subject and didn’t know who to ask.