Application Security: Model Object

The AppUserFactory model object plays a simple but crucial role in application security: the ApplicationSecurityDelegate passes credentials from the Login form to the AppUserFactory to retrieve the associated user record. If such retrieval is impossible, then the AppUserFactory returns nothing. If successful, an AppUser object is returned.

Listing: rsrc/model/application/AppUserFactory.php

class AppUserFactory extends DefaultAppUserFactory
{
   static function authenticatedUser($data = null)
   {
      // If no credentials provided, authentication fails
      if (! $data) return false;

      // If no password provided, authentication fails
      if (! isset($data['password']) or ! $data['password']) return false;

      // Retrieve an AppUser object using the credentials
      $email = strtolower($data['email']);
      $login = AppUserFactory::retrieveAppUser($email, 'lower(email)');

      // If no AppUser object could be created, authentication fails
      if (! $login) return false;

      // If the password does not match, authentication fails
      if ($login->password != md5($data['password'])) return false;

      // Return the authenticated user
      return $login;
   }
}