You are here

function farm_access_entity_perms in farmOS 7

Generate permission lists for farm entities.

This is a helper function to make the task of generating permission lists easier.

Parameters

array $types: An array of entity types/bundles to generate permissions for. Example: $types = array( 'taxonomy' => array( 'farm_areas', ), );

array $ops: An array of strings: 'create', 'view', 'edit', 'delete' Use this to specify exactly what kinds of permissions should be returned for each entity type. Only include the ones you want. If none are provided, all permissions will be returned. Example: $ops = array( 'create', 'view', 'edit', 'delete', );

Return value

array Returns a list of permissions for the given entity type+bundle.

1 call to farm_access_entity_perms()
farm_access_entity_bundles_role_perms in modules/farm/farm_access/farm_access.module
Generate permission lists for farm entity bundles for a given role.

File

modules/farm/farm_access/farm_access.module, line 425
Farm Access module.

Code

function farm_access_entity_perms(array $types, $ops = array()) {

  // Start with an empty array.
  $perms = array();

  // If the operations array is empty, fill it in.
  if (empty($ops)) {
    $ops = array(
      'create',
      'view',
      'edit',
      'delete',
    );
  }

  // Iterate through the types.
  foreach ($types as $type => $bundles) {

    // Iterate through the bundles.
    foreach ($bundles as $bundle) {

      // Switch through available entity types.
      switch ($type) {

        // Farm Asset.
        case 'farm_asset':

          // Create.
          if (in_array('create', $ops)) {
            $perms[] = 'create ' . $bundle . ' farm assets';
          }

          // View.
          if (in_array('view', $ops)) {
            $perms[] = 'view any ' . $bundle . ' farm assets';
            $perms[] = 'view own ' . $bundle . ' farm assets';
          }

          // Edit.
          if (in_array('edit', $ops)) {
            $perms[] = 'edit any ' . $bundle . ' farm assets';
            $perms[] = 'edit own ' . $bundle . ' farm assets';
          }

          // Delete.
          if (in_array('delete', $ops)) {
            $perms[] = 'delete any ' . $bundle . ' farm assets';
            $perms[] = 'delete own ' . $bundle . ' farm assets';
          }
          break;

        // Farm Plan.
        case 'farm_plan':

          // Create.
          if (in_array('create', $ops)) {
            $perms[] = 'create ' . $bundle . ' farm plans';
          }

          // View.
          if (in_array('view', $ops)) {
            $perms[] = 'view any ' . $bundle . ' farm plans';
            $perms[] = 'view own ' . $bundle . ' farm plans';
          }

          // Edit.
          if (in_array('edit', $ops)) {
            $perms[] = 'edit any ' . $bundle . ' farm plans';
            $perms[] = 'edit own ' . $bundle . ' farm plans';
          }

          // Delete.
          if (in_array('delete', $ops)) {
            $perms[] = 'delete any ' . $bundle . ' farm plans';
            $perms[] = 'delete own ' . $bundle . ' farm plans';
          }
          break;

        // Log.
        case 'log':

          // Create.
          if (in_array('create', $ops)) {
            $perms[] = 'create ' . $bundle . ' log entities';
          }

          // View.
          if (in_array('view', $ops)) {
            $perms[] = 'view any ' . $bundle . ' log entities';
            $perms[] = 'view own ' . $bundle . ' log entities';
          }

          // Edit.
          if (in_array('edit', $ops)) {
            $perms[] = 'edit any ' . $bundle . ' log entities';
            $perms[] = 'edit own ' . $bundle . ' log entities';
          }

          // Delete.
          if (in_array('delete', $ops)) {
            $perms[] = 'delete any ' . $bundle . ' log entities';
            $perms[] = 'delete own ' . $bundle . ' log entities';
          }
          break;

        // Taxonomy term.
        case 'taxonomy_term':

          // Edit.
          if (in_array('edit', $ops)) {
            $perms[] = 'edit terms in ' . $bundle;
          }

          // Delete.
          if (in_array('delete', $ops)) {
            $perms[] = 'delete terms in ' . $bundle;
          }
          break;
      }
    }
  }

  // Return the permissions.
  return $perms;
}