diff options
author | Chris Cornutt <enygma@phpdeveloper.org> | 2015-08-05 20:48:35 -0500 |
---|---|---|
committer | Chris Cornutt <enygma@phpdeveloper.org> | 2015-08-05 20:48:35 -0500 |
commit | f5a09d8e42aa6754d39bc7932bea413d2520e269 (patch) | |
tree | a254694084d7602100e686d4095a42cdbe756953 /src | |
parent | 99a27f69d32df6a86805600d8f60a0d9745dec32 (diff) | |
download | gatekeeper-f5a09d8e42aa6754d39bc7932bea413d2520e269.zip gatekeeper-f5a09d8e42aa6754d39bc7932bea413d2520e269.tar.gz gatekeeper-f5a09d8e42aa6754d39bc7932bea413d2520e269.tar.bz2 |
Adding the cloning operation (for users first)2.9
Diffstat (limited to 'src')
-rw-r--r-- | src/Psecio/Gatekeeper/Gatekeeper.php | 4 | ||||
-rw-r--r-- | src/Psecio/Gatekeeper/Handler/CloneInstance.php | 47 |
2 files changed, 50 insertions, 1 deletions
diff --git a/src/Psecio/Gatekeeper/Gatekeeper.php b/src/Psecio/Gatekeeper/Gatekeeper.php index 10c2b84..61bbc53 100644 --- a/src/Psecio/Gatekeeper/Gatekeeper.php +++ b/src/Psecio/Gatekeeper/Gatekeeper.php @@ -17,7 +17,7 @@ class Gatekeeper * @var array */ private static $actions = array( - 'find', 'delete', 'create', 'save' + 'find', 'delete', 'create', 'save', 'clone' ); /** @@ -462,6 +462,8 @@ class Gatekeeper $action = new \Psecio\Gatekeeper\Handler\Delete($name, $args, self::$datasource); } elseif ($action == 'save') { $action = new \Psecio\Gatekeeper\Handler\Save($name, $args, self::$datasource); + } elseif ($action == 'clone') { + $action = new \Psecio\Gatekeeper\Handler\CloneInstance($name, $args, self::$datasource); } return $action->execute(); } diff --git a/src/Psecio/Gatekeeper/Handler/CloneInstance.php b/src/Psecio/Gatekeeper/Handler/CloneInstance.php new file mode 100644 index 0000000..66cc4d3 --- /dev/null +++ b/src/Psecio/Gatekeeper/Handler/CloneInstance.php @@ -0,0 +1,47 @@ +<?php + +namespace Psecio\Gatekeeper\Handler; +use Psecio\Gatekeeper\Gatekeeper; + +class CloneInstance extends \Psecio\Gatekeeper\Handler +{ + /** + * Execute the object/record clone handling + * + * @return boolean Success/fail of user cloning + */ + public function execute() + { + $args = $this->getArguments(); + $name = $this->getName(); + $method = ucwords($name); + + if (method_exists($this, $method) === true) { + return $this->$method($args[0], $args[1]); + } + return false; + } + + public function CloneUser($user, $data) + { + $ds = Gatekeeper::getDatasource(); + $newUser = new \Psecio\Gatekeeper\UserModel($ds, $data); + $result = $newUser->save(); + + if ($result == false) { + return false; + } + + // Get the user's groups and add + foreach ($user->groups as $group) { + $newUser->addGroup($group); + } + + // Get the user's permissions and add + foreach ($user->permissions as $permission) { + $newUser->addPermission($permission); + } + + return true; + } +}
\ No newline at end of file |