--- clipper.module	Sun Mar 05 20:21:46 2006
+++ clipper.module	Sun Mar 05 21:27:40 2006
@@ -44,6 +44,13 @@ function clipper_menu($may_cache) {
 }
 
 /**
+ * Implementation of hook_perm().
+ */
+function clipper_perm() {
+  return array('view clipper relations', 'add clipper relations');
+}
+
+/**
  * Implementation of form_alter
  */
 function clipper_form_alter($form_id, &$form) {
@@ -70,7 +77,9 @@ function clipper_nodeapi(&$node, $op) {
         clipper_validate($node);
       break;
       case 'insert':
-        clipper_insert($node);
+        if (user_access('add clipper relations') || user_access('administer nodes')) {
+          clipper_insert($node);
+        }
       break;
       case 'update':
         clipper_update($node);
@@ -81,7 +90,9 @@ function clipper_nodeapi(&$node, $op) {
       case 'load':
         return clipper_load($node);
       case 'view':
-        $node->body .= theme('clipper_view', $node);
+        if (user_access('view clipper relations') || user_access('administer nodes')) {
+          $node->body .= theme('clipper_view', $node);
+        }
       break;
     }
   }
@@ -145,6 +156,7 @@ function clipper_load($node) {
  * NodeAPI: Adds a parent selector to the node editing form.
  */
 function clipper_form($node) {
+  if (!(user_access('add clipper relations') || user_access('administer nodes'))) { return; }
   // determine what content types this node can relate to.
   $relatable_types = variable_get('clipper_'. $node->type .'_relatable', array());
 
@@ -334,6 +346,7 @@ function clipper_get_parents($node) {
  */
 function clipper_link($type, $node = NULL, $teaser = FALSE) {
   if ($type != 'node' || $teaser) { return; }
+  if (!(user_access('add clipper relations') || user_access('administer nodes'))) { return; }
 
   // since we only want to display "add child content-type" links
   // for those type that allow THIS node to be its parent, we have
