array( 'description' => 'Group Description', 'column' => 'description', 'type' => 'varchar' ), 'id' => array( 'description' => 'Group ID', 'column' => 'id', 'type' => 'integer' ), 'name' => array( 'description' => 'Group name', 'column' => 'name', 'type' => 'varchar' ), 'created' => array( 'description' => 'Date Created', 'column' => 'created', 'type' => 'datetime' ), 'updated' => array( 'description' => 'Date Updated', 'column' => 'updated', 'type' => 'datetime' ), 'users' => array( 'description' => 'Users belonging to this group', 'type' => 'relation', 'relation' => array( 'model' => '\\Psecio\\Gatekeeper\\UserCollection', 'method' => 'findByGroupId', 'local' => 'id' ) ), 'permissions' => array( 'description' => 'Permissions belonging to this group', 'type' => 'relation', 'relation' => array( 'model' => '\\Psecio\\Gatekeeper\\PermissionCollection', 'method' => 'findByGroupId', 'local' => 'id' ) ), 'children' => array( 'description' => 'Child Groups', 'type' => 'relation', 'relation' => array( 'model' => '\\Psecio\\Gatekeeper\\GroupCollection', 'method' => 'findChildrenByGroupId', 'local' => 'id' ) ) ); /** * Add a user to the group * * @param integer|UserModel $user Either a user ID or a UserModel instance */ public function addUser($user) { if ($this->id === null) { return false; } if ($user instanceof UserModel) { $user = $user->id; } $data = array( 'group_id' => $this->id, 'user_id' => $user ); $groupUser = new UserGroupModel($this->getDb(), $data); return $this->getDb()->save($groupUser); } /** * Remove a user from a group * * @param integer|UserModel $user User ID or model instance * @return boolean Success/fail of removal */ public function removeUser($user) { if ($this->id === null) { return false; } if ($user instanceof UserModel) { $user = $user->id; } $data = array( 'group_id' => $this->id, 'user_id' => $user ); $groupUser = new UserGroupModel($this->getDb(), $data); return $this->getDb()->delete($groupUser); } /** * Add a permission relation for the group * * @param integer|PermissionModel $permission Either a permission ID or PermissionModel * @return boolean Success/fail of removal */ public function addPermission($permission) { if ($this->id === null) { return false; } if ($permission instanceof PermissionModel) { $permission = $permission->id; } $data = array( 'permission_id' => $permission, 'group_id' => $this->id ); $groupPerm = new GroupPermissionModel($this->getDb(), $data); return $this->getDb()->save($groupPerm); } /** * Remove a permission from a group * * @param integer|PermissionModel $permission Permission model or ID * @return boolean Success/fail of removal */ public function removePermission($permission) { if ($this->id === null) { return false; } if ($permission instanceof PermissionModel) { $permission = $permission->id; } $data = array( 'permission_id' => $permission, 'group_id' => $this->id ); $groupPerm = new GroupPermissionModel($this->getDb(), $data); return $this->getDb()->delete($groupPerm); } /** * Check if the user is in the current group * * @param integer $userId User ID * @return boolean Found/not found in group */ public function inGroup($userId) { $userGroup = new UserGroupModel($this->getDb()); $userGroup = $this->getDb()->find($userGroup, array( 'group_id' => $this->id, 'user_id' => $userId )); return ($userGroup->id !== null) ? true : false; } /** * Add the given group or group ID as a child of the current group * * @param integer|GroupModel $group Group ID or Group model instance * @return boolean Result of save operation */ public function addChild($group) { if ($this->id === null) { return false; } if ($group instanceof GroupModel) { $group = $group->id; } $childGroup = new GroupParentModel( $this->getDb(), array('groupId' => $group, 'parentId' => $this->id) ); return $this->getDb()->save($childGroup); } /** * Remove a child group either by ID or Group model instance * * @param integer|GroupModel $group Group ID or Group model instance * @return boolean Result of delete operation */ public function removeChild($group) { if ($this->id === null) { return false; } if ($group instanceof GroupModel) { $group = $group->id; } $childGroup = new GroupParentModel($this->getDb()); $childGroup = $this->getDb()->find( $childGroup, array('group_id' => $group, 'parent_id' => $this->id) ); return $this->getDb()->delete($childGroup); } }