lundi 30 août 2010

10 vérités sur moi

Kosh a lancé il y a quelques temps un petit jeu pour les blogueurs : il faut dire 10 vérités sur soi, et demander à quelqu’un d’enchainer. Je pensais pouvoir éviter la corvée, jusqu’à ce que Vko se souvienne de moi… Voilà donc 10 vérités totalement futiles et inintéressantes sur moi, profitez-en bien !

- Je déteste parler de moi. L'écriture de ce billet va être pour moi une effroyable torture.

- Mon nom de famille est "Lacasa". C'est un nom d'origine espagnole qui se prononce donc "lacassa", et non "lacaza". Il s'agit d'un nom très répandu en Aragon, région d'où étaient originaires mes grands parents, un chocolat très réputé porte d'ailleurs ce nom en Espagne.

- Je n'aime pas WoW. J'évite en général de m'en vanter au bureau, mais c'est hélas vrai.

- J'ai écris mes premières lignes de code en Turbo Pascal, alors que je venais de rentrer au collège. Lorsque j'ai eu des cours de programmation au lycée (en Turbo Pascal toujours), il m'est arrivé de donner la correction d'un exercice à la prof, sa version étant incorrecte. Elle ne m'a d'ailleurs jamais rendu ma disquette.

- Même si j'aime à me faire passer pour un ariégeois, je n'ai réellement vécu à Pamiers que 10 mois. Mon accent vient en fait de Carcassonne, où j'ai passé toute mon enfance.
Il n'empêche que toute ma famille vit en Ariège, et que j'y passe régulièrement mes week-ends.

- Je n'aime pas la bière. C'est quand même pas ma faute si c'est pas bon ! Et j'aimerais bien qu'on arrête de me prendre pour un extra-terrestre à chaque fois que je le dis...

- Lorsque j'étais jeune, je voulais devenir PDG de Microsoft pour être aussi riche que Bill Gates. Ce projet n'est plus d'actualité, mais je ne désespère pas de devenir riche par d'autres moyens.

- Je n'ai qu'un rein. Mais il est plus gros que la moyenne, donc je ne complexe pas. 23 ans plus tard, la cicatrice de l'opération de l'ablation du rein gauche est toujours visible sur mon ventre.

- Je ne suis pas un grand amateur de musique... ça surprend souvent les gens, mais je n'achète pas de CD, et je n'ai pas de lecteur mp3. Je n'ai rien contre la musique, j'en écoute lorsque je suis avec d'autres personnes, mais globalement en bruit de fond je préfère entendre des gens qui parlent (des radios d'info en général).

- Je suis bien content d'avoir fini de dire mes 10 trucs sur moi (si, si, c'est ça la 10ème vérité sur ma vie)

Et maintenant, au tour de Chris !

mardi 17 août 2010

De la 3D sur Windows Phone 7

Pour changer un peu du développement web, on peut aller voir ce qui se fait sur Windows Phone.

Aujourd’hui, je vous propose de découvrir le moteur 3D fait par David Catuhe pour Windows Phone : c’est juste impressionnant. Pour voir la démo, ça se passe sur facebook : http://www.facebook.com/video/video.php?v=1413141241316&oid=129459787073480

N’hésitez pas à “liker” la vidéo si vous aimez !

ASP.NET MVC : gestion dynamique des droits d’accès aux pages

Si vous lisez mon blog régulièrement, vous avez du vous rendre compte qu’ASP.NET MVC n’est pas vraiment terrible, puisque je passe mon temps à refaire tout ce qu’il fait déjà. Je continue aujourd’hui avec la gestion des droits d’accès aux pages.

ASP.NET MVC, tout comme les WebForms, se base sur les Membership providers pour la gestion des utilisateurs. Mais contrairement aux WebForms, on ne pourra pas utiliser le web.config pour définir quelles pages sont accessibles ; pour ça, MVC utilise les DataAnnotations sur les contrôleurs et les actions.
On va décorer nos contrôleurs (ou nos actions) avec un petit [Authorize] pour définir que l’utilisateur doit être logué pour accéder au contrôleur (ou à l’action).

Pour donner les autorisations par utilisateur ou par rôle (groupes basés sur le Role Provider), on va pouvoir définir les utilisateurs et rôles autorisés.
En pratique, ça donnera quelque chose comme ça :

   1: [Authorize]



   2: public ActionResult UserDetail()



   3: {



   4:     var userData = GetCurrentUserData();



   5:  



   6:     return View(userData);



   7: }



   8:  



   9: [Authorize(Roles="Administrateurs", Users="Guigui")]



  10: public ActionResult Admin()



  11: {



  12:     return View();



  13: }




Voilà, c’est bien beau tout ça, mais comme j’ai dis en introduction, ça me suffit pas. Oui, je suis exigeant (qui a dit “chieur” ?), et moi ce que je veux, c’est pouvoir définir les droits dynamiquement. Par exemple, j’aurai dans ma base de données ma liste de contrôleurs, d’actions, et de rôles associés qui seraient autorisés à y accéder… et ça, ben je peux pas le faire avec le AuthorizeAttribute.



Qu’à celà ne tienne, je vais faire mon attribut à moi ! Et comme j’ai pas envie de tout refaire, je vais directement hériter du AuthorizeAttribute, et faire mes vérifications à la mimine. Pour les vérifications, j’aurai juste à redéfinir la méthode “AuthorizeCore” qui renverra true si l’utilisateur a accès, ou false s’il n’y a pas accès… Voilà le résultat :





   1: public class MyDbAuthorizeAttribute : AuthorizeAttribute



   2: {



   3:     protected override bool AuthorizeCore(HttpContextBase httpContext)



   4:     {



   5:         MvcHandler handler = httpContext.CurrentHandler as MvcHandler;



   6:         RouteValueDictionary routeValues = handler.RequestContext.RouteData.Values;



   7:  



   8:         String controller = routeValues["controller"].ToString();



   9:         String action = routeValues["action"].ToString();



  10:         IPrincipal user = httpContext.User;



  11:  



  12:         return CheckAuthorization(user, controller, action);



  13:     }



  14:  



  15:     private bool CheckAuthorization(System.Security.Principal.IPrincipal iPrincipal, string controller, string action)



  16:     {



  17:         // Ici je vais pouvoir interroger ma base de données



  18:         return true;



  19:     }



  20: }




Une fois qu’on a définit notre attribut, on n’a plus qu’à taguer tous nos contrôleurs avec un [MyDbAuthorize] pour que la vérification des droits se fasse dans notre méthode de vérification.