/** * 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; }