summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Cornutt <enygma@phpdeveloper.org>2015-07-02 21:47:06 -0500
committerChris Cornutt <enygma@phpdeveloper.org>2015-07-02 21:47:06 -0500
commit6c5330e65e24d50ade2c10b313e2ec9445f90bbe (patch)
tree2ac9ec880054bef56dfbf61421a72bc1288f76a5
parente2b0acf8723beba1e677001bd34bd3ba34dbbf62 (diff)
downloadgatekeeper-6c5330e65e24d50ade2c10b313e2ec9445f90bbe.zip
gatekeeper-6c5330e65e24d50ade2c10b313e2ec9445f90bbe.tar.gz
gatekeeper-6c5330e65e24d50ade2c10b313e2ec9445f90bbe.tar.bz2
adding support for the "expires" handling in the user permissions
-rw-r--r--docs/users.md10
-rw-r--r--src/Psecio/Gatekeeper/UserModel.php11
-rw-r--r--src/Psecio/Gatekeeper/UserPermissionCollection.php3
-rw-r--r--src/Psecio/Gatekeeper/UserPermissionModel.php5
4 files changed, 25 insertions, 4 deletions
diff --git a/docs/users.md b/docs/users.md
index 0ee2e51..347bf6e 100644
--- a/docs/users.md
+++ b/docs/users.md
@@ -225,6 +225,16 @@ if (Gatekeeper::findUserById($userId)->addPermission($permissionId) === true) {
?>
```
+You can also provide an optional second parameter with an expiration time if you only want to allow the user the permission for a limited about of time. This parameter should be in the form of a Unix timestamp:
+
+```php
+<?php
+Gatekeeper::findUserById(1)->addPermission($permissionId, strtotime('+1 day'));
+?>
+```
+
+When fetching a user's permission list (like with `$user->permissions`) it will only return the non-expired or permanent permissions.
+
## Revoking a permission
You can remove a permission from a user by revoking it:
diff --git a/src/Psecio/Gatekeeper/UserModel.php b/src/Psecio/Gatekeeper/UserModel.php
index a5ab7fa..503fcf4 100644
--- a/src/Psecio/Gatekeeper/UserModel.php
+++ b/src/Psecio/Gatekeeper/UserModel.php
@@ -187,16 +187,21 @@ class UserModel extends \Psecio\Gatekeeper\Model\Mysql
* Attach a permission to a user account
*
* @param integer|PermissionModel $perm Permission ID or model isntance
+ * @param integer $expire Expiration time of the permission relationship
*/
- public function addPermission($perm)
+ public function addPermission($perm, $expire = null)
{
if ($perm instanceof PermissionModel) {
$perm = $perm->id;
}
- $perm = new UserPermissionModel($this->getDb(), array(
+ $data = [
'user_id' => $this->id,
'permission_id' => $perm
- ));
+ ];
+ if ($expire !== null && is_int($expire)) {
+ $data['expire'] = $expire;
+ }
+ $perm = new UserPermissionModel($this->getDb(), $data);
return $this->getDb()->save($perm);
}
diff --git a/src/Psecio/Gatekeeper/UserPermissionCollection.php b/src/Psecio/Gatekeeper/UserPermissionCollection.php
index 0de1d6e..872aafe 100644
--- a/src/Psecio/Gatekeeper/UserPermissionCollection.php
+++ b/src/Psecio/Gatekeeper/UserPermissionCollection.php
@@ -15,7 +15,8 @@ class UserPermissionCollection extends \Psecio\Gatekeeper\Collection\Mysql
$data = array('userId' => $userId);
$sql = 'select p.* from '.$prefix.'permissions p, '.$prefix.'user_permission up'
.' where p.id = up.permission_id'
- .' and up.user_id = :userId';
+ .' and up.user_id = :userId'
+ .' and (up.expire >= UNIX_TIMESTAMP(NOW()) or up.expire is null)';
$results = $this->getDb()->fetch($sql, $data);
diff --git a/src/Psecio/Gatekeeper/UserPermissionModel.php b/src/Psecio/Gatekeeper/UserPermissionModel.php
index 5bb769f..ca5051a 100644
--- a/src/Psecio/Gatekeeper/UserPermissionModel.php
+++ b/src/Psecio/Gatekeeper/UserPermissionModel.php
@@ -30,6 +30,11 @@ class UserPermissionModel extends \Psecio\Gatekeeper\Model\Mysql
'column' => 'id',
'type' => 'integer'
),
+ 'expire' => array(
+ 'description' => 'Expiration Date',
+ 'column' => 'expire',
+ 'type' => 'datetime'
+ ),
'created' => array(
'description' => 'Date Created',
'column' => 'created',