]> git.andy128k.dev Git - ipf.git/commitdiff
sync permissions
authorAndrey Kutejko <andy128k@gmail.com>
Sat, 23 Aug 2014 05:08:09 +0000 (08:08 +0300)
committerAndrey Kutejko <andy128k@gmail.com>
Sat, 23 Aug 2014 05:08:09 +0000 (08:08 +0300)
ipf/admin/commands/syncperms.php
ipf/auth/models.php [new file with mode: 0644]
ipf/project.php

index c56430bfae5273f60cbf2fca5028046ae8a1da70..7940096b2a7be439d36301165e9301455fb62f04 100644 (file)
@@ -11,7 +11,7 @@ class IPF_Admin_Command_SyncPerms
 
         IPF_Admin_App::loadAllModels();
 
-        print "COLLECTED PERMS:\n----\n";
+        print "COLLECTED PERMISSIONS:\n";
         $permissions = array();
         foreach (IPF_Project::getInstance()->appList() as $appname => $app) {
             foreach (IPF_Legacy_ORM_App::appModelList($app) as $modelName) {
@@ -20,46 +20,45 @@ class IPF_Admin_Command_SyncPerms
                     foreach ($adminModel->getPerms(null) as $permName) {
                         $name = get_class($app).'|'.$modelName.'|'.$permName;
                         $permissions[$name] = array($app, $modelName, $permName);
-                        print $name."\n";
+                        print '  '.$name."\n";
                     }
                 }
             }
         }
-        print "\n";
-
-        print "EXISTING PERMS:\n----\n";
-        $existingPerms = array();
-        foreach (Permission::table()->findAll() as $model) {
-            $existingPerms[$model->name] = $model;
-            print $model->name."\n";
-        }
-        print "\n";
 
 
-        $toDel = array_diff(array_keys($existingPerms), array_keys($permissions));
+        $existing = \PFF\Container::databaseQuery()
+            ->from('auth_permission')
+            ->orderBy('name')
+            ->fetchAll('name');
+        print "\nEXISTING PERMISSIONS:\n  ".implode("\n  ", array_keys($existing))."\n";
 
-        print "2DEL:\n----\n".implode("\n", $toDel)."\n----\n";
 
+        $toDel = array_diff(array_keys($existing), array_keys($permissions));
         if (count($toDel)) {
-            Permission::query()
-                ->delete()
-                ->where("name in ('".implode("','", $toDel)."')")
+            print "\nDELETING:\n  ".implode("\n  ", $toDel)."\n";
+            \PFF\Container::databaseQuery()
+                ->deleteFrom('auth_permission')
+                ->where('name', $toDel)
                 ->execute();
         }
 
 
-        $toAdd = array_diff(array_keys($permissions), array_keys($existingPerms));
+        $toAdd = array_diff(array_keys($permissions), array_keys($existing));
+        if (count($toAdd)) {
+            print "\nADDING:\n  ".implode("\n  ", $toAdd)."\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) {
-            $app = $permissions[$name][0];
-            $admin = IPF_Admin_Model::getModelAdmin($permissions[$name][1]);
-
-            $model = new Permission;
-            $model->name = $name;
-            $model->title = $app->getTitle().' | '.$admin->verbose_name().' | '.ucfirst($permissions[$name][2]);
-            $model->save();
+                \PFF\Container::databaseQuery()
+                    ->insertInto('auth_permission')
+                    ->values(array(
+                        'name' => $name,
+                        'title' => $app->getTitle().' | '.$admin->verbose_name().' | '.ucfirst($permissions[$name][2]),
+                    ))->execute();
+            }
         }
     }
 }
diff --git a/ipf/auth/models.php b/ipf/auth/models.php
new file mode 100644 (file)
index 0000000..5012883
--- /dev/null
@@ -0,0 +1,15 @@
+<?php
+
+class Permission
+{
+    public $id, $name, $title;
+
+    public static function query()
+    {
+        return \PFF\Container::databaseQuery()
+            ->from('auth_permission')
+            ->asObject('Permission')
+            ->orderBy('name');
+    }
+}
+
index 97e253a247889ca01dc2a77aac96dce6f87bf6f5..8bb7ded5bfee671165b02a69f303d8d11a146d6e 100644 (file)
@@ -76,6 +76,10 @@ final class IPF_Project
     {
         \PFF\Container::setFactory('databaseConnection', array('IPF_Database', 'connect'));
 
+        \PFF\Container::setFunction('databaseQuery', function() {
+            return new FluentPDO(\PFF\Container::databaseConnection());
+        });
+
         if (IPF::get('debug')) {
             error_reporting(E_ALL);
         }