drupal5: สร้างเอกสารภายในและภายนอก

ถ้าเราต้องการให้ผู้อ่านมีสิทธิ์ที่ไม่เท่ากัน โดยให้กำหนดด้วย role ในการเข้าถึงเอกสารใน node ต่าง ๆ สามารถทำได้โดยใช้มอดูล Taxonomy Access Control Lite ดังนี้

  1. ติดตั้งมอดูล Taxonomy Access Control Lite
    $ cd /var/www/drupal/sites/all/modules
    $ wget http://ftp.drupal.org/files/projects/tac_lite-5.x-1.1.tar.gz
    $ tar xfz tac_lite-5.x-1.1.tar.gz
  2. เปิดใช้งานผ่าน URL:admin/build/modules
  3. สร้าง Vocaburary ใหม่ ด้วย Taxonomy ผ่าน URL:admin/content/taxonomy
    โดยเลือกแท็บ Add vocaburaly ตั้งชื่อว่า Privacy
    สร้าง terms ชื่อว่า Public และ Private ตามลำดับ โดยอย่าให้เป็นฟรีแท็กส์
  4. เปิดให้ admin สามารถใช้งานมอดูลได้ ผ่าน URL:admin/user/access
  5. เมื่อสร้างเสร็จจะเกิดเมนูย่อยชื่อ Access control by taxonomy ให้เลือก Vocaburary ว่า Privacy
  6. เลือกแท็บ Role based privileges และเล็อกกำหนดสิทธิ์ให้แต่ละ role ได้ตามต้องการ เช่น anonymous เป็น Public และ authenticated เป็นทั้ง Public และ Private เป็นต้น

เสร็จแล้ว หลังจากนี้ ในขั้นตอนของการสร้างเอกสาร จะมีที่เลือก Privacy ในหัวข้อ Categories ให้เราเลือกว่าจะให้เป็น Public หรือ Private

อ้างอิง - Content Type access permisions

หมายเหตุ

ถ้าใช้ Drupal-5.5 และ Drupal-5.6 และใช้ฐานข้อมูล Postgresql อาจมีข้อผิดพลาดเกิดขึ้น ต้องปรับแก้ Core ที่ไฟล์ includes/database.pgsql.inc ดังนี้
$ vi includes/database.pgsql.inc

...
function db_distinct_field($table, $field, $query) {
    if (!preg_match('/FROM\s+\S+\s+AS/si', $query)
      && !preg_match('/DISTINCT\s+ON\s*\(\s*('. $table .'\s*\.\s*)?'. $field .'\s*\)/si', $query)
      && preg_match('/(.*FROM\s+)(.*?\s)(\s*(WHERE|GROUP|HAVING|ORDER|LIMIT|FOR).*)/Asi', $query, $m)) {
        $query = $m[1];
        $query .= preg_replace('/([\{\w+\}]+)\s+(' . $table . ')\s/Usi', '(SELECT DISTINCT ON (' . $field . ') * FROM \1) \2 ', $m[2]);
        $query .= $m[3];
    }

    return $query;
}
...

อ้างอิง - Nodes are sorted incorrectly with PostgreSQL

Topic: