I would suggest to use the code I sent you and just rename the UserController::login() method to UserController::admin_login(). It just feels like it belongs under the admin space, there also might be some other technical implications in the background... But hey, this is just my solution, there is probably a better, more conventional solution, I just don't know it :D
So you are right - just play around (and don't forget get back to us with your findings). Cheers mate! On Saturday, October 20, 2012 12:54:19 AM UTC+2, advantage+ wrote: > > Thanks for your time and input. > > > > Ohh yes there is no admin_login function. All logins are handled via > UsersController::login() > > > > I will play around and see what happens J > > Thanks, > > > > Dave > > > > *From:* [email protected] <javascript:> [mailto: > [email protected] <javascript:>] *On Behalf Of *Vanja Dizdarevic > *Sent:* Friday, October 19, 2012 8:01 PM > *To:* [email protected] <javascript:> > *Subject:* Re: Routing Issue > > > > Well, this code pretty much does what you want, but I gather you want to > redirect them to *UsersController::login()* function, NOT the * > UsersController::admin_login()* function? > > CakePHP redirects basically work like this: > > > > If the current request has a prefix and you want to A: eliminate the > prefix or B: switch to another prefix, you have to A: set that prefix > parameter to false B: change the prefix paramter. > > So you have to define the 'loginAction' parameter like this, to ensure a > user is directed to a non-prefixed user/login: > > public $components = array( > > 'Auth' => array('authorize' => 'Controller', > > 'loginAction' => array( > > 'controller' => 'users', > > 'action' => 'login', > > 'prefix'=> false, > > 'admin' => false > > ))); > > > > The you don't need to define the previously mentioned route. > > > > > On Saturday, October 20, 2012 12:05:58 AM UTC+2, advantage+ wrote: > > Thanks, > > > > But I don’t want admin or anything before login > > > > I don’t want to put admin => false, editor => false or anything they might > be trying > > > > Simply if they do try to access something with any of the admin routes > they get sent to users/login. Any controller which has no public asses at > all $this->Auth->allow(); //allow nothing so any attempt to access any > function in the controller / letmein/users/view/12 will send them to > users/login not some fake letmein/user/login or admin / manger / > editor….simply send them to USERS/LOGIN no prefix, no route just > USERS/LOGIN. > > > > > > *From:* [email protected] [mailto:[email protected]] *On > Behalf Of *Vanja Dizdarevic > *Sent:* Friday, October 19, 2012 6:36 PM > *To:* [email protected] > *Subject:* Re: Routing Issue > > > > Since I'm no expert in Auth component, let me just sing you the song of my > code. > > file: routes.php > > Router::connect('/users/login', array('controller'=>'users', > 'action'=>'login', 'prefix'=>'admin', 'admin'=>true)); > > > > file: AppController.php > > public $components = array( > > 'Auth' => array('authorize' => 'Controller', > > // this forces admin_login to be the only login method > regardless of prefix > > 'loginAction' => array( > > 'controller' => 'users', > > 'action' => 'login', > > 'prefix'=>'admin', > > 'admin' => true)) > > ); > > public function beforeFilter(){ > > if (isset($this->params['prefix']) > > && in_array($this->params['prefix'], array('admin', > 'editor'))) { > > //not relevant to question, but useful: > > Configure::write('Session.timeout', 60 * 4); > > $this->layout = 'admin'; > > > > $this->Auth->deny(); > > } > > else { > > Configure::write('Session.timeout', 60 * 48); // > > $this->layout = 'default'; > > > > $this->Auth->allow('*'); > > } > > } > > > > public function isAuthorized($user = null) { > > > > // Any registered user can access public functions > > if (empty($this->request->params['admin']) > > && empty($this->request->params['editor'])) { > > return true; > > } > > // Only admins can access admin functions > > if (isset($this->request->params['admin'])) { > > return (bool)($user['role'] === 'admin'); > > } > > // Only editors can access editor functions > > if (isset($this->request->params['editor'])) { > > return (bool)($user['role'] === 'editor'); > > } > > > > // Default deny > > return false; > > } > > > > This works for me (but test it anyways). I'm using 'admin' and 'editor', > but login is always done through *UserController::admin_login()* method, > regardless of prefix. > The login route is always */users/login*, without the prefix. > > Is this what you were searching for? > > -- > Like Us on FaceBook https://www.facebook.com/CakePHP > Find us on Twitter http://twitter.com/CakePHP > > --- > You received this message because you are subscribed to the Google Groups > "CakePHP" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > Visit this group at http://groups.google.com/group/cake-php?hl=en. > > > > -- > Like Us on FaceBook https://www.facebook.com/CakePHP > Find us on Twitter http://twitter.com/CakePHP > > --- > You received this message because you are subscribed to the Google Groups > "CakePHP" group. > To post to this group, send email to [email protected]<javascript:> > . > To unsubscribe from this group, send email to > [email protected] <javascript:>. > Visit this group at http://groups.google.com/group/cake-php?hl=en. > > > -- Like Us on FaceBook https://www.facebook.com/CakePHP Find us on Twitter http://twitter.com/CakePHP --- You received this message because you are subscribed to the Google Groups "CakePHP" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. Visit this group at http://groups.google.com/group/cake-php?hl=en.
