--- /dev/null
+<?php
+
+namespace Drush\Role;
+
+abstract class RoleBase {
+ /**
+ * Drupal 6 and Drupal 7:
+ * 'rid' is numeric
+ * 'name' is machine name (e.g. 'anonymous user')
+ *
+ * Drupal 8:
+ * 'rid' is machine name (e.g. 'anonymous')
+ * 'name' is human-readable name (e.g. 'Anonymous user').
+ *
+ * c.f. http://drupal.org/node/1619504
+ */
+ public $name;
+ public $rid;
+
+ /**
+ * This is initialized to the result of the user_roles()
+ * function, which returns an associative array of
+ * rid => name pairs.
+ */
+ public $roles;
+
+ /**
+ * This constructor will allow the role to be selected either
+ * via the role id or via the role name.
+ */
+ public function __construct($rid = DRUPAL_ANONYMOUS_RID) {
+ $this->roles = user_roles();
+ if (!is_numeric($rid)) {
+ $role_name = $rid;
+ if (in_array($role_name, $this->roles)) {
+ $rid = array_search($role_name, $this->roles);
+ }
+ }
+
+ if (isset($this->roles[$rid])) {
+ $this->rid = $rid;
+ // In D8+ Role is an object.
+ $this->name = is_object($this->roles[$rid]) ? $this->roles[$rid]->label() : $this->roles[$rid];
+ }
+ else {
+ throw new RoleException(dt('Could not find the role: !role', array('!role' => $rid)));
+ }
+ }
+
+ /*
+ * Get all perms for a given Role.
+ */
+ public function getPerms() {
+ return array();
+ }
+
+ /*
+ * Get all perms for a given module.
+ */
+ public function getModulePerms($module) {
+ return array();
+ }
+
+ /*
+ * Get all permissions site-wide.
+ */
+ public function getAllModulePerms() {
+ $permissions = array();
+ drush_include_engine('drupal', 'environment');
+ $module_list = drush_module_list();
+ ksort($module_list);
+ foreach ($module_list as $module) {
+ if ($perms = $this->getModulePerms($module)) {
+ $permissions = array_merge($permissions, $perms);
+ }
+ }
+ return $permissions;
+ }
+
+ public function role_create($role_machine_name, $role_human_readable_name = '') {
+ }
+
+ public function delete() {
+ }
+
+ public function add($perm) {
+ $perms = $this->getPerms();
+ if (!in_array($perm, $perms)) {
+ $this->grant_permissions(array($perm));
+ return TRUE;
+ }
+ else {
+ drush_log(dt('"!role" already has the permission "!perm"', array(
+ '!perm' => $perm,
+ '!role' => $this->name,
+ )), 'ok');
+ return FALSE;
+ }
+ }
+
+ public function remove($perm) {
+ $perms = $this->getPerms();
+ if (in_array($perm, $perms)) {
+ $this->revoke_permissions(array($perm));
+ return TRUE;
+ }
+ else {
+ drush_log(dt('"!role" does not have the permission "!perm"', array(
+ '!perm' => $perm,
+ '!role' => $this->name,
+ )), 'ok');
+ return FALSE;
+ }
+ }
+
+ public function grant_permissions($perms) {
+ }
+
+ public function revoke_permissions($perms) {
+ }
+}