diff options
author | Chris Cornutt <enygma@phpdeveloper.org> | 2015-07-02 21:47:06 -0500 |
---|---|---|
committer | Chris Cornutt <enygma@phpdeveloper.org> | 2015-07-02 21:47:06 -0500 |
commit | 6c5330e65e24d50ade2c10b313e2ec9445f90bbe (patch) | |
tree | 2ac9ec880054bef56dfbf61421a72bc1288f76a5 | |
parent | e2b0acf8723beba1e677001bd34bd3ba34dbbf62 (diff) | |
download | gatekeeper-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.md | 10 | ||||
-rw-r--r-- | src/Psecio/Gatekeeper/UserModel.php | 11 | ||||
-rw-r--r-- | src/Psecio/Gatekeeper/UserPermissionCollection.php | 3 | ||||
-rw-r--r-- | src/Psecio/Gatekeeper/UserPermissionModel.php | 5 |
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', |