2010-01-04 25 views
1

Je suis en train de créer un camp de base comme connexion où les utilisateurs peuvent se connecter pour voir leurs entreprises des projets utilisant l'URL: http://abc.com/companyname/Création d'une connexion comme Basecamp dans CakePHP

Je ne sais pas comment créer un auth 2 niveaux .. (un au niveau de l'entreprise et un autre au niveau de l'utilisateur) Je suis nouveau à cakePHP et je ne sais pas comment modifier le composant d'authentification intégré pour mon exigence .. Toute aide serait reconnaissante ...

Répondre

1

I utiliserait le composant Auth pour la connexion. Je ne plaisante pas avec l'ACL et d'autres choses car c'est assez confus je trouve.

Je voudrais aborder cela en ajoutant une colonne user_level, access_level ou permissions dans votre table users. Ensuite, ici, vous pouvez stocker une valeur numérique ou similaire. Ensuite, dans le modèle User, lorsqu'ils se connectent en utilisant Auth, vous pouvez stocker cette valeur dans l'objet de session Auth User. Vous pouvez donc y accéder en utilisant $ this-> Auth ('User.access_level') dans vos contrôleurs. Maintenant, le composant Auth a par défaut une fonction isAuthorized() dans le controleur_app_application_service. Cette fonction est appelée pour voir si quelqu'un s'est connecté. Vous pouvez le modifier pour vérifier ce niveau d'accès et prendre des mesures appropriées. J'ai utilisé cette technique pour que les utilisateurs ne puissent pas entrer dans le routage/cms sauf s'ils sont admin = 1.

Vous trouverez plus d'informations à ce sujet dans les documents, http://book.cakephp.org/view/172/Authentication et vous pouvez en savoir plus sur isAuthorized() ici, Assurez-vous de configurer toutes vos variables de composant Auth dans votre app_controller. Assurez-vous également que votre type d'authentification est défini sur controller, et que vous autorisez() et deny() sont correctement configurés. Le seul gros problème avec tout cela, c'est que si vous utilisez un beforeFilter() dans vos contrôleurs, vous devrez vous assurer de faire parent :: beforeFilter() pour vous assurer que le contenu de l'app_controller est exécuté au préalable :)

1

Honnêtement, je pense que vous devriez vérifier le composant ACL. Le tutoriel du livre est très bien si vous le suivez. L'inconvénient majeur est qu'il ne fournit pas de mécanisme pour le contrôle d'accès au niveau des lignes (par exemple, l'utilisateur X peut modifier cette entrée particulière). Cependant, il fournit une base pour effectuer un contrôle d'accès au niveau utilisateur/groupe, que vous pouvez ensuite étendre pour créer l'accès au niveau ligne dont vous avez besoin. En résumé, le composant ACL prend en charge les autorisations en cascade (par exemple, les sous-groupes peuvent disposer d'un contrôle d'accès finement détaillé, mais héritent des autorisations du groupe parent). Cela peut rendre la vie beaucoup plus facile, si vous avez besoin à la fois de robustesse et de granularité.

Vous pouvez également consulter la boulangerie, car il existe d'autres composants auth écrits par la communauté qui peuvent répondre à vos besoins. Fortement recommandé, comme les choses Auth/ACL est difficile à bien faire, et toujours une préoccupation majeure avec les applications Web.