Development

Changeset 5760

You must first sign up to be able to contribute.

Changeset 5760

Show
Ignore:
Timestamp:
10/30/07 08:51:16 (1 year ago)
Author:
francois
Message:

sfGuardPlugin Made the model extensible, fixed unique column problems

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • plugins/sfGuardPlugin/README

    r5310 r5760  
    327327=== 1.1.13 PRE === 
    328328 
     329 * francois: fixed indexes on unique columns were not unique 
     330 * francois: switched to YAML schema, to allow overriding by way of sfPropelAlternativeSchemaPlugin 
     331 * francois: added `lib/model/plugin/` classes to make the model truly extensible 
     332  
    329333=== 1.1.12 === 
    330334 
  • plugins/sfGuardPlugin/lib/model/sfGuardGroup.php

    r1949 r5760  
    1616 * @version    SVN: $Id$ 
    1717 */ 
    18 class sfGuardGroup extends BasesfGuardGroup 
     18class sfGuardGroup extends PluginsfGuardGroup 
    1919{ 
    20   public function __toString() 
    21   { 
    22     return $this->getName(); 
    23   } 
    2420} 
  • plugins/sfGuardPlugin/lib/model/sfGuardGroupPeer.php

    r3109 r5760  
    1616 * @version    SVN: $Id$ 
    1717 */ 
    18 class sfGuardGroupPeer extends BasesfGuardGroupPeer 
     18class sfGuardGroupPeer extends PluginsfGuardGroupPeer 
    1919{ 
    20   public static function retrieveByName($name) 
    21   { 
    22     $c = new Criteria(); 
    23     $c->add(self::NAME, $name); 
    24  
    25     return self::doSelectOne($c); 
    26   } 
    2720} 
  • plugins/sfGuardPlugin/lib/model/sfGuardGroupPermission.php

    r1949 r5760  
    1616 * @version    SVN: $Id$ 
    1717 */ 
    18 class sfGuardGroupPermission extends BasesfGuardGroupPermission 
     18class sfGuardGroupPermission extends PluginsfGuardGroupPermission 
    1919{ 
    2020} 
  • plugins/sfGuardPlugin/lib/model/sfGuardGroupPermissionPeer.php

    r1949 r5760  
    1616 * @version    SVN: $Id$ 
    1717 */ 
    18 class sfGuardGroupPermissionPeer extends BasesfGuardGroupPermissionPeer 
     18class sfGuardGroupPermissionPeer extends PluginsfGuardGroupPermissionPeer 
    1919{ 
    2020} 
  • plugins/sfGuardPlugin/lib/model/sfGuardPermission.php

    r1949 r5760  
    1616 * @version    SVN: $Id$ 
    1717 */ 
    18 class sfGuardPermission extends BasesfGuardPermission 
     18class sfGuardPermission extends PluginsfGuardPermission 
    1919{ 
    20   public function __toString() 
    21   { 
    22     return $this->getName(); 
    23   } 
    2420} 
  • plugins/sfGuardPlugin/lib/model/sfGuardPermissionPeer.php

    r3187 r5760  
    1616 * @version    SVN: $Id$ 
    1717 */ 
    18 class sfGuardPermissionPeer extends BasesfGuardPermissionPeer 
     18class sfGuardPermissionPeer extends PluginsfGuardPermissionPeer 
    1919{ 
    20   public static function retrieveByName($name) 
    21   { 
    22     $c = new Criteria(); 
    23     $c->add(self::NAME, $name); 
    24  
    25     return self::doSelectOne($c); 
    26   } 
    2720} 
  • plugins/sfGuardPlugin/lib/model/sfGuardRememberKey.php

    r3109 r5760  
    1616 * @version    SVN: $Id: sfGuardPermissionPeer.php 2344 2006-10-06 17:06:58Z davedash $ 
    1717 */ 
    18 class sfGuardRememberKey extends BasesfGuardRememberKey 
     18class sfGuardRememberKey extends PluginsfGuardRememberKey 
    1919{ 
    2020} 
  • plugins/sfGuardPlugin/lib/model/sfGuardRememberKeyPeer.php

    r3109 r5760  
    1616 * @version    SVN: $Id: sfGuardPermissionPeer.php 2344 2006-10-06 17:06:58Z davedash $ 
    1717 */ 
    18 class sfGuardRememberKeyPeer extends BasesfGuardRememberKeyPeer 
     18class sfGuardRememberKeyPeer extends PluginsfGuardRememberKeyPeer 
    1919{ 
    2020} 
  • plugins/sfGuardPlugin/lib/model/sfGuardUser.php

    r5193 r5760  
    1616 * @version    SVN: $Id$ 
    1717 */ 
    18 class sfGuardUser extends BasesfGuardUser 
     18class sfGuardUser extends PluginsfGuardUser 
    1919{ 
    20   protected 
    21     $profile        = null, 
    22     $groups         = null, 
    23     $permissions    = null, 
    24     $allPermissions = null; 
    25  
    26   public function __toString() 
    27   { 
    28     return $this->getUsername(); 
    29   } 
    30  
    31   public function setPassword($password) 
    32   { 
    33     if (!$password) 
    34     { 
    35       return; 
    36     } 
    37  
    38     $salt = md5(rand(100000, 999999).$this->getUsername()); 
    39     $this->setSalt($salt); 
    40     $algorithm = sfConfig::get('app_sf_guard_plugin_algorithm_callable', 'sha1'); 
    41     $algorithmAsStr = is_array($algorithm) ? $algorithm[0].'::'.$algorithm[1] : $algorithm; 
    42     if (!is_callable($algorithm)) 
    43     { 
    44       throw new sfException(sprintf('The algorithm callable "%s" is not callable.', $algorithmAsStr)); 
    45     } 
    46     $this->setAlgorithm($algorithmAsStr); 
    47  
    48     parent::setPassword(call_user_func_array($algorithm, array($salt.$password))); 
    49   } 
    50  
    51   public function setPasswordBis($password) 
    52   { 
    53   } 
    54  
    55   public function checkPassword($password) 
    56   { 
    57     if ($callable = sfConfig::get('app_sf_guard_plugin_check_password_callable')) 
    58     { 
    59       return call_user_func_array($callable, array($this->getUsername(), $password)); 
    60     } 
    61     else 
    62     { 
    63       return $this->checkPasswordByGuard($password); 
    64     } 
    65   } 
    66  
    67   public function checkPasswordByGuard($password) 
    68   { 
    69     $algorithm = $this->getAlgorithm(); 
    70     if (false !== $pos = strpos($algorithm, '::')) 
    71     { 
    72       $algorithm = array(substr($algorithm, 0, $pos), substr($algorithm, $pos + 2)); 
    73     } 
    74     if (!is_callable($algorithm)) 
    75     { 
    76       throw new sfException(sprintf('The algorithm callable "%s" is not callable.', $algorithm)); 
    77     } 
    78  
    79     return $this->getPassword() == call_user_func_array($algorithm, array($this->getSalt().$password)); 
    80   } 
    81  
    82   public function getProfile() 
    83   { 
    84     if (!is_null($this->profile)) 
    85     { 
    86       return $this->profile; 
    87     } 
    88  
    89     $profileClass = sfConfig::get('app_sf_guard_plugin_profile_class', 'sfGuardUserProfile'); 
    90     if (!class_exists($profileClass)) 
    91     { 
    92       throw new sfException(sprintf('The user profile class "%s" does not exist.', $profileClass)); 
    93     } 
    94  
    95     $fieldName = sfConfig::get('app_sf_guard_plugin_profile_field_name', 'user_id'); 
    96     $profilePeerClass =  $profileClass.'Peer'; 
    97  
    98     // to avoid php segmentation fault 
    99     class_exists($profilePeerClass); 
    100  
    101     $foreignKeyColumn = call_user_func_array(array($profilePeerClass, 'translateFieldName'), array($fieldName, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_COLNAME)); 
    102  
    103     if (!$foreignKeyColumn) 
    104     { 
    105       throw new sfException(sprintf('The user profile class "%s" does not contain a "%s" column.', $profileClass, $fieldName)); 
    106     } 
    107  
    108     $c = new Criteria(); 
    109     $c->add($foreignKeyColumn, $this->getId()); 
    110  
    111     $this->profile = call_user_func_array(array($profileClass.'Peer', 'doSelectOne'), array($c)); 
    112  
    113     if (!$this->profile) 
    114     { 
    115       $this->profile = new $profileClass(); 
    116       if (method_exists($this->profile, 'setsfGuardUser')) 
    117       { 
    118         $this->profile->setsfGuardUser($this); 
    119       } 
    120       else 
    121       { 
    122         $method = 'set'.call_user_func_array(array($profilePeerClass, 'translateFieldName'), array($fieldName, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_PHPNAME)); 
    123         $this->profile->$method($this->getId()); 
    124       } 
    125     } 
    126  
    127     return $this->profile; 
    128   } 
    129  
    130   public function addGroupByName($name, $con = null) 
    131   { 
    132     $group = sfGuardGroupPeer::retrieveByName($name); 
    133     if (!$group) 
    134     { 
    135       throw new Exception(sprintf('The group "%s" does not exist.', $name)); 
    136     } 
    137  
    138     $ug = new sfGuardUserGroup(); 
    139     $ug->setsfGuardUser($this); 
    140     $ug->setGroupId($group->getId()); 
    141  
    142     $ug->save($con); 
    143   } 
    144  
    145   public function addPermissionByName($name, $con = null) 
    146   { 
    147     $permission = sfGuardPermissionPeer::retrieveByName($name); 
    148     if (!$permission) 
    149     { 
    150       throw new Exception(sprintf('The permission "%s" does not exist.', $name)); 
    151     } 
    152  
    153     $up = new sfGuardUserPermission(); 
    154     $up->setsfGuardUser($this); 
    155     $up->setPermissionId($permission->getId()); 
    156  
    157     $up->save($con); 
    158   } 
    159  
    160   public function hasGroup($name) 
    161   { 
    162     if (!$this->groups) 
    163     { 
    164       $this->getGroups(); 
    165     } 
    166  
    167     return isset($this->groups[$name]); 
    168   } 
    169  
    170   public function getGroups() 
    171   { 
    172     if (!$this->groups) 
    173     { 
    174       $this->groups = array(); 
    175  
    176       $c = new Criteria(); 
    177       $c->add(sfGuardUserGroupPeer::USER_ID, $this->getId()); 
    178       $ugs = sfGuardUserGroupPeer::doSelectJoinsfGuardGroup($c); 
    179  
    180       foreach ($ugs as $ug) 
    181       { 
    182         $group = $ug->getsfGuardGroup(); 
    183         $this->groups[$group->getName()] = $group; 
    184       } 
    185     } 
    186  
    187     return $this->groups; 
    188   } 
    189  
    190   public function getGroupNames() 
    191   { 
    192     return array_keys($this->getGroups()); 
    193   } 
    194  
    195   public function hasPermission($name) 
    196   { 
    197     if (!$this->permissions) 
    198     { 
    199       $this->getPermissions(); 
    200     } 
    201  
    202     return isset($this->permissions[$name]); 
    203   } 
    204  
    205   public function getPermissions() 
    206   { 
    207     if (!$this->permissions) 
    208     { 
    209       $this->permissions = array(); 
    210  
    211       $c = new Criteria(); 
    212       $c->add(sfGuardUserPermissionPeer::USER_ID, $this->getId()); 
    213       $ups = sfGuardUserPermissionPeer::doSelectJoinsfGuardPermission($c); 
    214  
    215       foreach ($ups as $up) 
    216       { 
    217         $permission = $up->getsfGuardPermission(); 
    218         $this->permissions[$permission->getName()] = $permission; 
    219       } 
    220     } 
    221  
    222     return $this->permissions; 
    223   } 
    224  
    225   public function getPermissionNames() 
    226   { 
    227     return array_keys($this->getPermissions()); 
    228   } 
    229  
    230   // merge of permission in a group + permissions 
    231   public function getAllPermissions() 
    232   { 
    233     if (!$this->allPermissions) 
    234     { 
    235       $this->allPermissions = $this->getPermissions(); 
    236  
    237       foreach ($this->getGroups() as $group) 
    238       { 
    239         foreach ($group->getsfGuardGroupPermissions() as $gp) 
    240         { 
    241           $permission = $gp->getsfGuardPermission(); 
    242  
    243           $this->allPermissions[$permission->getName()] = $permission; 
    244         } 
    245       } 
    246     } 
    247  
    248     return $this->allPermissions; 
    249   } 
    250  
    251   public function getAllPermissionNames() 
    252   { 
    253     return array_keys($this->getAllPermissions()); 
    254   } 
    255  
    256   public function reloadGroupsAndPermissions() 
    257   { 
    258     $this->groups         = null; 
    259     $this->permissions    = null; 
    260     $this->allPermissions = null; 
    261   } 
    262  
    263   public function delete($con = null) 
    264   { 
    265     // delete profile if available 
    266     try 
    267     { 
    268       if ($profile = $this->getProfile()) 
    269       { 
    270         $profile->delete(); 
    271       } 
    272     } 
    273     catch (sfException $e) 
    274     { 
    275     } 
    276  
    277     return parent::delete(); 
    278   } 
    27920} 
  • plugins/sfGuardPlugin/lib/model/sfGuardUserGroup.php

    r4939 r5760  
    1616 * @version    SVN: $Id$ 
    1717 */ 
    18 class sfGuardUserGroup extends BasesfGuardUserGroup 
     18class sfGuardUserGroup extends PluginsfGuardUserGroup 
    1919{ 
    20   public function save($con = null) 
    21   { 
    22     parent::save($con); 
    23  
    24     $this->getsfGuardUser($con)->reloadGroupsAndPermissions(); 
    25   } 
    2620} 
  • plugins/sfGuardPlugin/lib/model/sfGuardUserGroupPeer.php

    r3109 r5760  
    1616 * @version    SVN: $Id$ 
    1717 */ 
    18 class sfGuardUserGroupPeer extends BasesfGuardUserGroupPeer 
     18class sfGuardUserGroupPeer extends PluginsfGuardUserGroupPeer 
    1919{ 
    2020} 
  • plugins/sfGuardPlugin/lib/model/sfGuardUserPeer.php

    r3810 r5760  
    1616 * @version    SVN: $Id$ 
    1717 */ 
    18 class sfGuardUserPeer extends BasesfGuardUserPeer 
     18class sfGuardUserPeer extends PluginsfGuardUserPeer 
    1919{ 
    20   public static function retrieveByUsername($username, $isActive = true) 
    21   { 
    22     $c = new Criteria(); 
    23     $c->add(self::USERNAME, $username); 
    24     $c->add(self::IS_ACTIVE, $isActive); 
    25  
    26     return self::doSelectOne($c); 
    27   } 
    28  
    2920} 
  • plugins/sfGuardPlugin/lib/model/sfGuardUserPermission.php

    r4939 r5760  
    1616 * @version    SVN: $Id$ 
    1717 */ 
    18 class sfGuardUserPermission extends BasesfGuardUserPermission 
     18class sfGuardUserPermission extends PluginsfGuardUserPermission 
    1919{ 
    20   public function save($con = null) 
    21   { 
    22     parent::save($con); 
    23  
    24     $this->getsfGuardUser($con)->reloadGroupsAndPermissions(); 
    25   } 
    2620} 
  • plugins/sfGuardPlugin/lib/model/sfGuardUserPermissionPeer.php

    r3109 r5760  
    1616 * @version    SVN: $Id$ 
    1717 */ 
    18 class sfGuardUserPermissionPeer extends BasesfGuardUserPermissionPeer 
     18class sfGuardUserPermissionPeer extends PluginsfGuardUserPermissionPeer 
    1919{ 
    2020} 
  • plugins/sfGuardPlugin/package.xml

    r5193 r5760  
    2323  <active>yes</active> 
    2424 </lead> 
     25 <developer> 
     26  <name>Francois Zaninotto</name> 
     27  <user>fzaninotto</user> 
     28  <email>francois.zaninotto@symfony-project.com</email> 
     29  <active>yes</active> 
     30 </developer> 
    2531 <date>2007-09-19</date> 
    2632 <version> 
    27    <release>1.1.12</release> 
     33   <release>1.1.13</release> 
    2834   <api>1.1.0</api> 
    2935 </version> 
     
    4248       <file role="data" name="config.php" /> 
    4349       <!-- model --> 
    44        <file role="data" name="schema.xml" /> 
     50       <file role="data" name="schema.yml" /> 
    4551     </dir> 
    4652 
     
    5965     <dir name="lib"> 
    6066       <dir name="model"> 
    61          <!-- sfGuardGroup model --> 
     67         <dir name="plugin"> 
     68           <file role="data" name="PluginsfGuardGroup.php" /> 
     69           <file role="data" name="PluginsfGuardGroupPeer.php" /> 
     70           <file role="data" name="PluginsfGuardGroupPermission.php" /> 
     71           <file role="data" name="PluginsfGuardGroupPermissionPeer.php" /> 
     72           <file role="data" name="PluginsfGuardPermission.php" /> 
     73           <file role="data" name="PluginsfGuardPermissionPeer.php" /> 
     74           <file role="data" name="PluginsfGuardUser.php" /> 
     75           <file role="data" name="PluginsfGuardUserPeer.php" /> 
     76           <file role="data" name="PluginsfGuardUserGroup.php" /> 
     77           <file role="data" name="PluginsfGuardUserGroupPeer.php" /> 
     78           <file role="data" name="PluginsfGuardUserPermission.php" /> 
     79           <file role="data" name="PluginsfGuardUserPermissionPeer.php" /> 
     80           <file role="data" name="PluginsfGuardRememberKey.php" /> 
     81           <file role="data" name="PluginsfGuardRememberKeyPeer.php" /> 
     82         </dir> 
    6283         <file role="data" name="sfGuardGroup.php" /> 
    6384         <file role="data" name="sfGuardGroupPeer.php" /> 
     
    89110     <dir name="modules"> 
    90111       <dir name="sfGuardAuth"> 
    91          <!-- sfGuardAuth module --> 
    92112         <file role="data" name="actions/actions.class.php" /> 
    93113         <file role="data" name="config/security.yml" /> 
     
    99119 
    100120       <dir name="sfGuardGroup"> 
    101          <!-- sfGuardGroup module --> 
    102121         <file role="data" name="actions/actions.class.php" /> 
    103122         <file role="data" name="config/generator.yml" /> 
     
    106125 
    107126       <dir name="sfGuardPermission"> 
    108          <!-- sfGuardPermission module --> 
    109127         <file role="data" name="actions/actions.class.php" /> 
    110128         <file role="data" name="config/generator.yml" /> 
     
    113131 
    114132       <dir name="sfGuardUser"> 
    115          <!-- sfGuardUser module --> 
    116133         <file role="data" name="actions/actions.class.php" /> 
    117134         <file role="data" name="config/generator.yml" />