#63240 Implement new views access callback feature and add install file with warning...
authorKaren Stevenson
Fri, 25 Apr 2008 02:03:14 +0000 (02:03 +0000)
committerKaren Stevenson
Fri, 25 Apr 2008 02:03:14 +0000 (02:03 +0000)
includes/content.views.inc
modules/content_permissions/content_permissions.install [new file with mode: 0644]
modules/content_permissions/content_permissions.module

index 55dae8f..f5c246f 100644 (file)
@@ -102,6 +102,9 @@ function content_views_field_views_data($field) {
         'additional fields' => $columns,
         'content_field_name' => $field['field_name'],
         'allow_empty' => TRUE,
+        // Access control modules should implement content_views_access_callback().
+        'access callback' => 'content_views_access_callback',
+        'access arguments' => array($field),        
       ),
       'argument' => array(
         'field' => $columns[0],
@@ -260,21 +263,6 @@ class views_handler_field_content extends views_handler_field_node {
     $this->content_field = content_fields($this->definition['content_field_name']);
   }
 
-  /**
-   * This provides a method of controlling field-level access in Views.
-   */
-  function access() {
-    // Avoid FALSE returns for non-existant hooks by using module_implements()
-    // to check only modules that implement the hook.
-    $modules = module_implements('content_views_access');
-    foreach ($modules as $module) {
-      if (module_invoke($module, 'content_views_access', $this->definition['content_field_name']) === FALSE) {
-        return FALSE;
-      }
-    }
-    return parent::access();
-  }
-
   function options(&$options) {
     parent::options($options);
     $field = $this->content_field;
diff --git a/modules/content_permissions/content_permissions.install b/modules/content_permissions/content_permissions.install
new file mode 100644 (file)
index 0000000..74c95fa
--- /dev/null
@@ -0,0 +1,8 @@
+<?php
+// $Id$
+/**
+ * Implementation of hook_install().
+ */
+function content_permissions_install() {
+  drupal_set_message(t('Please <a href="!url">configure your field permissions</a> immediately. All fields are inaccessible by default.', array('!url' => url('admin/user/access', array('fragment' => 'content_permissions')))));
+}
\ No newline at end of file
index 997800f..5104144 100644 (file)
@@ -1,12 +1,5 @@
 <?php
-
-/**
- * TODO:
- *   Views access implementation
- *   Fieldgroups
- */
-
-
+// $Id$
 /**
  *  Implementation of hook_perm().
  */
@@ -19,7 +12,7 @@ function content_permissions_perm() {
 }
 
 /**
- *  Implementation of hook_form_alter().
+ *  Implementation of hook_form_alter(). Remove inaccessible fields from node display.
  */
 function content_permissions_form_alter(&$form, $form_state, $form_id) {
   if (isset($form['type']) && isset($form['#node']) && $form['type']['#value'] .'_node_form' == $form_id) {
@@ -33,7 +26,7 @@ function content_permissions_form_alter(&$form, $form_state, $form_id) {
 }
 
 /**
- *  Implementation of hook_nodeapi().
+ *  Implementation of hook_nodeapi(). Remove inaccessible fields from node display.
  */
 function content_permissions_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
   if ($op == 'view') {
@@ -47,8 +40,10 @@ function content_permissions_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
 }
 
 /**
- *  Implementation of hook_content_views_access().
+ *  The default field access callback. Remove inaccessible fields from Views.
+ * 
+ * @see content_views_field_views_data(). 
  */
-function content_permissions_content_views_access($field_name) {
-  return user_access('view '. $field_name);
+function content_views_access_callback($field) {
+  return user_access('view '. $field['field_name']);
 }
\ No newline at end of file