On Thu, Apr 30, 2009 at 5:04 AM, Jonas Hartmann
<[email protected]> wrote:
>
> Hello,
>
> i have an issue with deploying my cake application. Running local on
> Mac OS X it works like charm. After uploading it to a Ubuntu based
> VHost on HostEurope I had some headaches with PLESK and its strange
> standard unix permission setup.

OT: I'd appreciate it if you posted a quick message discussing some of
the problems you encountered with Plesk and the solutions you found.
I'll soon be deploying something to a Plesk server and, though I've
found a few comments about that online, I haven't seen much in the way
of answers.

> I lose my session from time to time under heavy load. This happens
> with either php, cake or database sessions, I have tried all of them.
> It happens when for Instance I run 
> http://www.domain.tld/admin/categories/index
>  multiple times in Firefox-Tabs at once - thus, if I fire multiple
> http requests very shortly after each other. I have no clue if
> multiple users firing multiple events would lead to the same issue,
> yet (that would be even worse).
>
> I got the latest SVN head from 1.2 stable and just uploaded it to make
> sure that it is not already fixed / an internal problem.
>
> I am looking forward to your help/tips in regards to:
>
> a.) My small controller code, quoted below?
> b.) Debugging tips - how should I continue to understand what the
> problem is?
>
> I have disabled cache and debugging is on 2.
>
> This is how I test against routing prefix admin. I do not know if it
> is the best or recommended way. I would welcome suggestions. Best
> would be if the problem would be fixed afterwards
>
> <?php
>
> class AppController extends Controller {
>
>        var $helpers = array('Html', 'Form', 'Javascript', 'Time');
>        var $components = array('Cookie', 'Session', 'Auth');
>
>        function beforeFilter() {
>                if(isset($this->params['prefix'])) {
>                        if($this->params['prefix'] == 'admin') {
>                                Configure::write('debug', 2);
>                                $this->Auth->deny('*');
>                                $this->Auth->allow('login');
>                        } else {
>                                $this->Auth->allow('*');
>                        }
>                } else {
>                        $this->Auth->allow('*');
>                }
>        }
>
> }
> ?>

You should never include 'login' in allow().

This is how I have things working:

AppController:
function beforeFilter()
{
        $this->Auth->fields = array('username' => 'email', 'password' => 
'password');
        $this->Auth->loginError = 'No matching user found.';
        $this->Auth->loginAction = array('controller' => 'users', 'action' => 
'login');
        $this->Auth->loginRedirect = array('controller' => 'pages', 'action'
=> 'display', 'home');
        $this->Auth->autoRedirect = false;
        $this->Auth->logoutRedirect = array('controller' => 'users', 'action'
=> 'login');
        
        /* Auth will check controller's isAuthorized()
         */
        $this->Auth->authorize = 'controller';
        
        /* I have no public pages, so I need a better authError
         * than the default 'You are not authorized to access that
         * location.' for users who haven't loged in yet.
         */
        if (!$this->Session->read('User'))
        {
                $this->Auth->authError = 'Please log in';
        }
        
        $admin = Configure::read('Routing.admin');
        if (isset($this->params[$admin]) && $this->params[$admin])
        {
                $this->layout = 'admin';
        }
}

function isAuthorized()
{
        $admin = Configure::read('Routing.admin');
        if (isset($this->params[$admin]) && 
@isset($this->params['prefix'][$admin]))
        {
                /* see User::login()
                 */
                if ($this->Auth->user('admin') == 0)
                {
                        return false;
                }
        }               
        return true;
}

UsersController:

public function login()
{
        if ($user = $this->Auth->user())
        {
                /* All my Groups below 4 are some kind of admin
                 */
                if ($this->Auth->user('group_id') > 3)
                {
                        $this->redirect($this->Auth->loginRedirect);
                }
        
                /* This User is an admin. You might already have an
                 * 'admin' field in your table. I chose not to so I set it
                 * in Auth's session values.
                 */
                $this->Session->write('Auth.User.admin', 1);
                
                /* The redirect for an admin can be whatever you need
                 */
                $this->redirect(
                        array(
                                'controller' => 'admin',
                                'action' => 'index',
                                'admin' => 1
                        )
                );
        }
}

--~--~---------~--~----~------------~-------~--~----~
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]
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to