public function __construct()
{
parent::__construct(array(
- 'models' => self::ArePermissionsEnabled()
- ? array(
+ 'models' => array(
'User',
'Role',
- 'Permission',
- 'UserPermission',
- 'RolePermission',
- 'UserRole',
- )
- : array(
- 'User',
- ),
- ));
+ )));
}
static function login($request, $user)
$project = IPF_Project::getInstance();
$project->loadAllModels();
+ print "COLLECTED PERMS:\n----\n";
$permissions = array();
foreach ($project->appList() as $appname => $app) {
foreach ($app->modelList() as $modelName) {
$adminModel = IPF_Admin_Model::getModelAdmin($modelName);
if ($adminModel) {
foreach ($adminModel->getPerms(null) as $permName) {
- $permissions[] = get_class($app).'|'.$modelName.'|'.$permName;
+ $name = get_class($app).'|'.$modelName.'|'.$permName;
+ $permissions[$name] = array($app, $modelName, $permName);
+ print $name."\n";
}
}
}
}
+ print "\n";
- print "COLLECTED PERMS:\n----\n".implode("\n", $permissions)."\n----\n";
+ print "EXISTING PERMS:\n----\n";
+ $existingPerms = array();
+ foreach ($permsTable->findAll() as $model) {
+ $existingPerms[$model->name] = $model;
+ print $model->name."\n";
+ }
+ print "\n";
- if (count($permissions)) {
- $existingPerms = array();
- foreach ($permsTable->findAll() as $model)
- $existingPerms[] = $model->name;
+ $toDel = array_diff(array_keys($existingPerms), array_keys($permissions));
- print "EXISTING PERMS:\n----\n".implode("\n",$existingPerms)."\n----\n";
+ print "2DEL:\n----\n".implode("\n", $toDel)."\n----\n";
- if (count($existingPerms)) {
- $toDel = array_diff($existingPerms, $permissions);
+ if (count($toDel)) {
+ $permsTable->createQuery()
+ ->delete()
+ ->where("name in ('".implode("','", $toDel)."')")
+ ->execute();
+ }
- print "2DEL:\n----\n".implode("\n",$toDel)."\n----\n";
- if (count($toDel)) {
- $permsTable->createQuery()
- ->delete()
- ->where("name in ('".implode("','", $toDel)."')")
- ->execute();
- }
+ $toAdd = array_diff(array_keys($permissions), array_keys($existingPerms));
- $toAdd = array_diff($permissions, $existingPerms);
- } else {
- // first time
- // *** FIX: previously, the following models haven't "onDelete: CASCADE" constrain ***
- print "DROP RolePermission, UserRole, UserPermission\n";
- $export = IPF_ORM_Manager::connection()->export;
- $export->dropTable(IPF_ORM::getTable('RolePermission')->getTableName());
- $export->dropTable(IPF_ORM::getTable('UserRole')->getTableName());
- $export->dropTable(IPF_ORM::getTable('UserPermission')->getTableName());
- $auth_app = new IPF_Auth_App();
- IPF_ORM::createTablesFromModels($auth_app->modelList());
-
- $toAdd = $permissions;
- }
+ print "2ADD:\n----\n".implode("\n", $toAdd)."\n----\n";
- print "2ADD:\n----\n".implode("\n",$toAdd)."\n----\n";
+ foreach ($toAdd as $name) {
+ $app = $permissions[$name][0];
+ $admin = IPF_Admin_Model::getModelAdmin($permissions[$name][1]);
- foreach ($toAdd as $name) {
- $model = new Permission();
- $model->name = $name;
- $model->save();
- }
- } else {
- print "REMOVE ALL\n";
-
- $permsTable->createQuery()->delete()->execute(); // no women, no cry...
+ $model = new Permission;
+ $model->name = $name;
+ $model->title = $app->getTitle().' | '.$admin->verbose_name().' | '.ucfirst($permissions[$name][2]);
+ $model->save();
}
}
return $permissions;
}
- static function GetHumanNameOfPermission($permissionName)
- {
- $parts = explode('|', $permissionName);
- $appName = $parts[0];
- $app = new $appName();
- $admin = IPF_Admin_Model::getModelAdmin($parts[1]);
-
- return $app->getTitle().' | '.$admin->verbose_name().' | '.ucfirst($parts[2]);
- }
-
public function commands()
{
return array(
public static function setTableDefinition(IPF_ORM_Table $table)
{
$table->setTableName('auth_permission');
- $table->setColumn('name', 'string', 255, array('unique' => true, 'type' => 'string', 'length' => '255'));
+ $table->setColumn('name', 'string', 255, array('unique' => true, 'type' => 'string', 'notnull' => true, 'length' => '255'));
+ $table->setColumn('title', 'string', 255, array('type' => 'string', 'notnull' => true, 'length' => '255'));
$table->setOption('type', 'INNODB');
$table->setOption('collate', 'utf8_unicode_ci');
$table->setOption('charset', 'utf8');