วิธีซ่อนเขตข้อมูลผู้ใช้ที่กำหนดเองในโปรไฟล์ผู้ใช้


20

ใน Drupal 7 วิธีใดดีที่สุดที่จะป้องกันผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบจากการเปลี่ยนฟิลด์โปรไฟล์ผู้ใช้ที่กำหนดเอง

กรณีการใช้งาน: ฉันได้สร้างฟิลด์ผู้ใช้ชื่อ "รหัสลูกค้า" ที่ฉันไม่ต้องการให้ผู้ใช้ (ลูกค้ารายใดของฉัน) เปลี่ยน ฟิลด์นี้มีไว้สำหรับการอ้างอิงของฉันเองและสำหรับการใช้งานแบบเป็นโปรแกรมในโมดูลอื่น ๆ ฉันไม่สนใจผู้ใช้ที่เห็นรหัสลูกค้า แต่พวกเขาไม่สามารถแก้ไขได้

ฉันควรจะแทนที่เทมเพลตหน้าสำหรับหน้าโปรไฟล์ผู้ใช้หรือไม่ ถ้าเป็นเช่นนั้นเทมเพลตเปลี่ยนไปอย่างไรเพื่อให้เป็นฟิลด์แบบอ่านอย่างเดียวหรือมองไม่เห็น

ขอบคุณมากสำหรับความช่วยเหลือของคุณ!

คริส

คำตอบ:


17

ฉันคิดว่าField Permissionsเป็นสิ่งที่คุณกำลังมองหา นี่คือคำพูดเกี่ยวกับมัน (จากหน้าโครงการของโมดูล):

... อนุญาตให้ผู้ดูแลไซต์ตั้งค่าสิทธิ์ระดับฟิลด์เพื่อแก้ไขดูและสร้างฟิลด์ในเอนทิตีใด ๆ

คุณสมบัติ :

  • เปิดใช้งานการอนุญาตให้ใช้ฟิลด์ในเอนทิตีใด ๆ ไม่ใช่เฉพาะโหนด
  • การอนุญาตตามฟิลด์บทบาทช่วยให้มีรูปแบบการรับชมที่แตกต่างกันตามสิ่งที่ผู้ใช้เข้าถึง
  • สิทธิ์ระดับผู้เขียนอนุญาตให้ดูและแก้ไขฟิลด์ตามบุคคลที่เป็นเจ้าของนิติบุคคล
  • สิทธิ์สำหรับแต่ละฟิลด์จะไม่เปิดใช้งานโดยค่าเริ่มต้น แต่ผู้ดูแลระบบสามารถเปิดใช้งานการอนุญาตเหล่านี้อย่างชัดเจนสำหรับฟิลด์ที่จำเป็นต้องใช้คุณลักษณะนี้
  • ภาพรวมการอนุญาตฟิลด์

ขอบคุณนะ! ฉันได้ติดตั้งโมดูล Field Permissions (เวอร์ชันอัลฟ่าเป็นเวอร์ชั่นล่าสุดซึ่งทำให้ฉันกังวลเล็กน้อย แต่ไม่ว่าอะไรก็ตาม) และจะซ่อนฟิลด์จากผู้ใช้เมื่อผู้ใช้ดูโปรไฟล์ของเขา หลังจากทดลองใช้การตั้งค่าทั้งหมดของโมดูลดูเหมือนจะไม่มีทางทำให้ฟิลด์นี้ปรากฏ แต่อ่านได้อย่างเดียว ไม่ใช่ข้อกำหนดที่แน่นอน แต่ก็ดีที่มี
ctlarsen

การตั้งค่าฟิลด์ที่จะมองเห็นหมายความว่าฟิลด์ข้อความจะแสดงเป็นข้อความธรรมดา หากคุณต้องการเก็บฟิลด์ข้อความไว้และตั้งเป็นแบบอ่านอย่างเดียวฉันคิดว่าคุณต้องใช้ hook_form_alter ในแบบฟอร์มของคุณ
pasine

ขอบคุณอีกครั้งนะ ฉันจะใช้เส้นทาง hook_form_alter และดูว่าฉันไปไหน ดูเหมือนจะเป็นวิธีที่ดีที่สุด
ctlarsen

โมดูลField Permissionsทำงานได้ดีกับ Drupal 8 แต่คุณสามารถซ่อนเฉพาะฟิลด์ที่กำหนดเองได้ฉันคิดว่า (ฉันจำเป็นต้องใช้ชื่อผู้ใช้ไฮด์ด้วย)
Sébastien Gicquel

5

ในการซ่อนข้อมูลจากโปรไฟล์ของผู้ใช้รูปแบบที่คุณสามารถตั้งค่า#accessคุณสมบัติของฟิลด์เป็น FALSE hook_form_FORMID_alterใช้

ตัวอย่างต่อไปนี้ซ่อนฟิลด์field_organisationจากแบบฟอร์มโปรไฟล์ผู้ใช้สำหรับผู้ที่ไม่ใช่ผู้ดูแลระบบ:

function YOURCUSTOMMODULE_form_user_profile_form_alter(&$form, &$form_state, $form_id) {
  $current_user = user_uid_optional_load();
  if($current_user->uid != 1) {
    $form['field_organisation']['#access'] = FALSE;
  }
}

ดูคำถามที่คล้ายกันนี้กับ drupalans

คุณยังสามารถซ่อนฟิลด์จากหน้าโปรไฟล์ผู้ใช้ (ไม่ใช่แบบฟอร์ม) โดยใช้template_preprocess_user_profile

ตัวอย่างต่อไปนี้ซ่อนฟิลด์field_organisationจากหน้าผู้ใช้สำหรับผู้ที่ไม่ใช่ผู้ดูแลระบบ:

function YOURCUSTOMMODULE_preprocess_user_profile(&$vars) {
  $current_user = user_uid_optional_load();
  if($current_user->uid != 1) {
    unset($vars['user_profile']['field_organisation']);
  }
}

1

ดูเหมือนว่าจะมีโมดูลที่เรียกว่าhttp://drupal.org/project/user_readonly "โมดูลนี้ช่วยให้ผู้ดูแลระบบสามารถป้องกันการแก้ไขฟิลด์บัญชีผู้ใช้ / โปรไฟล์ผู้ดูแลระบบสามารถเลือกว่าจะไม่อนุญาตให้ใช้ฟิลด์ใดหรือฟิลด์ใดจะเป็น ได้รับอนุญาต."

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.