class-wp-role.php 2.6 KB
Newer Older
lechuck's avatar
lechuck committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
<?php
/**
 * User API: WP_Role class
 *
 * @package WordPress
 * @subpackage Users
 * @since 4.4.0
 */

/**
 * Core class used to extend the user roles API.
 *
 * @since 2.0.0
 */
class WP_Role {
	/**
	 * Role name.
	 *
	 * @since 2.0.0
	 * @var string
	 */
	public $name;

	/**
	 * List of capabilities the role contains.
	 *
	 * @since 2.0.0
	 * @var array
	 */
	public $capabilities;

	/**
	 * Constructor - Set up object properties.
	 *
	 * The list of capabilities, must have the key as the name of the capability
	 * and the value a boolean of whether it is granted to the role.
	 *
	 * @since 2.0.0
	 *
	 * @param string $role Role name.
	 * @param array $capabilities List of capabilities.
	 */
	public function __construct( $role, $capabilities ) {
samba's avatar
samba committed
44
		$this->name         = $role;
lechuck's avatar
lechuck committed
45 46 47 48 49 50 51 52 53 54 55 56
		$this->capabilities = $capabilities;
	}

	/**
	 * Assign role a capability.
	 *
	 * @since 2.0.0
	 *
	 * @param string $cap Capability name.
	 * @param bool $grant Whether role has capability privilege.
	 */
	public function add_cap( $cap, $grant = true ) {
samba's avatar
samba committed
57
		$this->capabilities[ $cap ] = $grant;
lechuck's avatar
lechuck committed
58 59 60 61
		wp_roles()->add_cap( $this->name, $cap, $grant );
	}

	/**
lucha's avatar
lucha committed
62
	 * Removes a capability from a role.
lechuck's avatar
lechuck committed
63
	 *
lucha's avatar
lucha committed
64 65 66 67
	 * This is a container for WP_Roles::remove_cap() to remove the
	 * capability from the role. That is to say, that WP_Roles::remove_cap()
	 * implements the functionality, but it also makes sense to use this class,
	 * because you don't need to enter the role name.
lechuck's avatar
lechuck committed
68 69 70 71 72 73
	 *
	 * @since 2.0.0
	 *
	 * @param string $cap Capability name.
	 */
	public function remove_cap( $cap ) {
samba's avatar
samba committed
74
		unset( $this->capabilities[ $cap ] );
lechuck's avatar
lechuck committed
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
		wp_roles()->remove_cap( $this->name, $cap );
	}

	/**
	 * Determines whether the role has the given capability.
	 *
	 * The capabilities is passed through the {@see 'role_has_cap'} filter.
	 * The first parameter for the hook is the list of capabilities the class
	 * has assigned. The second parameter is the capability name to look for.
	 * The third and final parameter for the hook is the role name.
	 *
	 * @since 2.0.0
	 *
	 * @param string $cap Capability name.
	 * @return bool True if the role has the given capability. False otherwise.
	 */
	public function has_cap( $cap ) {
		/**
lucha's avatar
lucha committed
93
		 * Filters which capabilities a role has.
lechuck's avatar
lechuck committed
94 95 96
		 *
		 * @since 2.0.0
		 *
samba's avatar
samba committed
97
		 * @param bool[] $capabilities Associative array of capabilities for the role.
lechuck's avatar
lechuck committed
98 99 100 101 102
		 * @param string $cap          Capability name.
		 * @param string $name         Role name.
		 */
		$capabilities = apply_filters( 'role_has_cap', $this->capabilities, $cap, $this->name );

samba's avatar
samba committed
103 104 105
		if ( ! empty( $capabilities[ $cap ] ) ) {
			return $capabilities[ $cap ];
		} else {
lechuck's avatar
lechuck committed
106
			return false;
samba's avatar
samba committed
107
		}
lechuck's avatar
lechuck committed
108 109 110
	}

}