Example #1
0
 /**
  * Signs in the user on the application.
  *
  * @param DmUser $user The DmUser id
  * @param boolean $remember Whether or not to remember the user
  * @param Doctrine_Connection $con A Doctrine_Connection object
  */
 public function signIn(DmUser $user, $remember = false, $con = null)
 {
     // signin
     $this->setAttribute('user_id', $user->get('id'), 'dmSecurityUser');
     $this->setAuthenticated(true);
     $this->clearCredentials();
     $this->addCredentials($user->getAllPermissionNames());
     $this->isSuperAdmin = $user->get('is_super_admin');
     // save last login
     dmDb::table('Dmuser')->createQuery()->update('Dmuser')->where('id = ?', $user->get('id'))->set('last_login', "'" . date('Y-m-d H:i:s') . "'")->execute();
     $this->user = $user;
     if ($remember) {
         try {
             $expirationAge = $this->getRememberKeyExpirationAge();
             // remove old keys
             Doctrine_Core::getTable('DmRememberKey')->createQuery()->delete()->where('created_at < ?', date('Y-m-d H:i:s', time() - $expirationAge))->execute();
             // remove other keys from this user
             Doctrine_Core::getTable('DmRememberKey')->createQuery()->delete()->where('dm_user_id = ?', $user->getId())->orWhere('ip_address = ?', $_SERVER['REMOTE_ADDR'])->execute();
             // generate new keys
             $key = md5(dmString::random(20));
             // save key
             $rk = new DmRememberKey();
             $rk->setRememberKey($key);
             $rk->setUser($user);
             $rk->setIpAddress($_SERVER['REMOTE_ADDR']);
             $rk->save($con);
             $this->dispatcher->notify(new sfEvent($this, 'user.remember_me', array('remember_key' => $key, 'expiration_age' => $expirationAge)));
         } catch (Exception $e) {
         }
     }
     $this->dispatcher->notify(new sfEvent($this, 'user.sign_in'));
 }
 /**
  * This method returns an array indexed by record id, containing authorized actions
  * for given module and user.
  * 
  * When using this method, make sure you specify the $args['model'] && $args['module'] !
  * 
  * @param unknown_type $args
  * @param DmUser $user
  */
 public function getRecordsPermissionsByRecord($args, DmUser $user, $limit = 0)
 {
     $cacheKey = sprintf('recordsPermissionsByRecord_%s_%s', serialize($args), $user->get($user->getTable()->getIdentifier()));
     if (!isset($args['model'])) {
         throw new LogicException('You must specify the $args[\'model\'] key !');
     }
     if (!isset($args['module'])) {
         throw new LogicException('You must specify the $args[\'module\'] key !');
     }
     $records = array();
     $permissions = $this->getRecordsPermissionsQuery($args, $user)->limit($limit)->execute(array(), Doctrine::HYDRATE_ARRAY);
     if (is_array($permissions) && !empty($permissions)) {
         foreach ($permissions as $permission) {
             if (!isset($records[$permission['secure_record']])) {
                 $records[$permission['secure_record']] = array();
             }
             $records[$permission['secure_record']][] = $permission['secure_action'];
         }
     }
     return $records;
 }