diff --git a/core/modules/field_ui/field_ui.module b/core/modules/field_ui/field_ui.module index c75005a..adb43f4 100644 --- a/core/modules/field_ui/field_ui.module +++ b/core/modules/field_ui/field_ui.module @@ -94,13 +94,14 @@ function field_ui_menu() { // items below. $field_position = count(explode('/', $path)) + 1; - // Extract access information, providing defaults. - $access = array_intersect_key($bundle_info['admin'], drupal_map_assoc(array('access callback', 'access arguments'))); - $access += array( + // User access check to be done against the permission to edit fields for + // each entity type. Could be refined to be even more granular and be + // per bundle but this is a start. + $access = array( 'access callback' => 'user_access', - 'access arguments' => array('administer site configuration'), + 'access arguments' => array('administer ' . $entity_type . ' fields') ); - + $items["$path/fields"] = array( 'title' => 'Manage fields', 'page callback' => 'drupal_get_form', @@ -192,6 +193,25 @@ function field_ui_menu() { } /** + * Implements hook_permission(). + */ +function field_ui_permission() { + + $permissions = array(); + + foreach (entity_get_info() as $entity_type => $entity_info) { + if ($entity_info['fieldable']) { + // Create a permission for each fieldable entity + $permissions['administer ' . $entity_type . ' fields'] = array( + 'title' => t('Administer ' . $entity_type . ' fields') + ); + } + } + + return $permissions; +} + +/** * Menu loader callback: Loads a field instance based on field and bundle name. * * @param $field_name