# Groups Groups are represented as objects in the Gatekeeper system with the following properties: - description - name - id - created - updated - users (relational) Gatekeeper also supports hierarchical groups (see below). ## Getting All Groups You can use the `findGroupss` method on the `Gatekeeper` class to get a list (returns a `GroupCollection`) of the current groups: ```php $groups = Gatekeeper::findGroups(); // You can then slice it up how you need, like getting the first three $shortGroupList = $groups->slice(1, 3); ``` ## Creating a Group Making a new group is as easy as making a new user. One thing to note, the *group name* must be **unique**: ```php 'group1', 'description' => 'Group #1' ); Gatekeeper::createGroup($attrs); ?> ``` You can also create a group with an expiration timeout, allowing users in that group only a certain timeframe for their access. You use the `expires` value on the creation to set this with a Unix timestamp: ```php 'group1', 'description' => 'Group #1', 'expires' => strtotime('+1 day') ); Gatekeeper::createGroup($attrs); ?> ``` You can then check to see if a group has expired with the `isExpired` method: ```php ``` ## Getting Group Users Much like you can easily get the groups the user belongs to, you can also get the members of a group. This will return a collection of user objects: ```php users; foreach ($users as $user) { echo 'Username: '.$user->username."\n"; } ?> ``` ## Adding a user to a group You can add a user to a group by giving the `addUser` method one of two kinds of inputs: ```php addUser(1); // Or a user model, it will extract the ID $user = new UserModel(); Gatekeeper::findGroupById(1)->addUser($user); ?> ``` ## Removing a user from a group You can remove a user from a group in much the same way, either by an ID or a User model instance with the `removeUser` method: ``` removeUser(1); // Or a user model, it will extract the ID $user = new UserModel(); Gatekeeper::findGroupById(1)->removeUser($user); ?> ``` ## Checking to see if a user is in a group You can use the `inGroup` method to check and see if a user ID is in a group: ```php inGroup($userId) === true) { echo 'User is in the group!'; } ?> ``` ## Adding a permission to a group You can add permissions to groups too. These are related to the groups, not the users directly, so if you get the permissions for a user, these will not show in the list. ```php addPermission($permId); // Or you can use a PermissionModel object $permission = Gatekeeper::findPermissionById(1); Gatekeeper::findGroupById(1)->addPermission($permission); ?> ``` ## Removing a permission from a group A permission can be removed from a group in the same way a user can, just with the `removePermission` method: ``` removePermission($permId); // Or you can use a PermissionModel object $permission = Gatekeeper::findPermissionById(1); Gatekeeper::findGroupById(1)->removePermission($permission); ?> ``` ## Getting the permissions associated with the group Since groups can have permissions attached, you can fetch those through the `permissions` property much in the same way you can for users: ```php permissions; foreach ($permissions as $permission) { echo 'Description: '.$permission->description."\n"; } ?> ``` ## Hierarchical Groups Groups can also be added as children of other groups to help make categorizing easier. They can either be added by ID or model instance: ```php addChild(2); // or $childGroup = Gatekeeper::findGroupById(2); $group->addChild($childGroup); ?> ``` You can find the child groups using the `children` property from a group instance: ``` children; ?> ``` You can also remove child groups similarly: ``` removeChild(2); // or by model instance $group2 = Gatekeeper::findGroupById(2); $group->removeChild($group2); ?> ```