Index: cck_field_perms.module
===================================================================
--- cck_field_perms.module	(revision 462)
+++ cck_field_perms.module	(working copy)
@@ -68,7 +68,7 @@
  * removes fields if a user does not have perms to view it
  */
 function cck_field_perms_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) { 
-  if ($op == 'view') {
+  if ($op == 'view' || $op == 'submit') {
     $type = $node->type;
     if ($types = variable_get('cfp_types', null)) {
       if ($types[$type]) {
@@ -76,10 +76,20 @@
         if ($disallowed_fields) { 
           foreach ($disallowed_fields[$type] as $disallowed_field => $value ) {
             if ($value == 0) {continue; }
+            if ($op == 'view') {
               if (!(user_access(_cfp_content_to_readable($type, $disallowed_field, "view")))) {     
                 $node->$disallowed_field['#access'] = false;
                 $node->content[$disallowed_field]['#access'] = false;                   
-            }   
+              }   
+            }
+            // if user isn't allowed to edit the field in an existing node, 
+            // restore previously saved value so that it isn't overwritten with a blank value
+            else if ($op == 'submit' && $node->nid) {
+              if (!(user_access(_cfp_content_to_readable($type, $disallowed_field, "submit")))) {
+                $savedNode = node_load($node->nid);
+                $node->{$disallowed_field} = $savedNode->{$disallowed_field};
+              }
+            }
           }
         }   
       }
