จะออกแบบระบบ Permission เหมือนของพวก CMS อย่างไรครับ

เริ่มโดย *~เก้าคุง~*, 07 ธันวาคม 2011, 00:32:53

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

*~เก้าคุง~*

คือตอนนี้กำลังทำระบบคล้ายๆ CMS อยู่ แต่ติดตรงในส่วนที่ควบคุมว่า ให้ user group ไหนใช้งาน page ไหนได้บ้างอ่ะครับ ตัว database ก็พอจะได้แล้ว แต่ติดตรงที่ว่า เราจะเอาหน้าแต่ละหน้า มาเชื่อมกับ ID ระบุใน database อย่างไร
เช่น ระบบผมมี module หลายๆ อันแบบนี้
MainApplication
-Modules
--UserManagement [main module]
---sub_module1[แก้ไขข้อมูลของตัวเอง]
---sub_module2[สำหรับ admin ผู้ดูแลระบบ]
---sub_module3[จัดการกลุ่มผู้ใช้งาน]

ที่ยกตัวอย่างมาก็คือตัวเว็บหลักของผมประกอบไปด้วย module หลัก คือ Usermanagement ซึ่งใช้จัดการข้อมูลส่วนตัว กลุ่มผู้ใช้งานต่างๆ ในเว็บ ซึ่งแต่ละส่วนนั้น ผมก็จะแยกออกเป็น sub module ลงไป เช่น
user ทั่วไป สามารถเข้าใช้งานได้เฉพาะ sub_module แก้ไขข้อมูลตัวเองได้เท่านั้น
admin สามารถจัดการได้ทุกอย่างเลย รวมถึงจัดการ user อื่นที่มีในระบบด้วย

ทีนี้ผมตัดตอนตัว database มาเฉพาะตรงส่วนที่ว่า group ไหน เข้า module ไหนได้บ้าง



ผมไม่แน่ใจเรื่อง database ว่าออกแบบถูกหรือป่าว แต่มันก็แค่จับคู่กันเฉยๆ ว่ากลุ่มไหนเข้าใช้ module ไหนได้

แต่ปัญหามันก็คือ เวลาเราเข้าใช้งานในแต่ละหน้าอ่ะครับ อย่างผมเข้าไปใช้งานหน้าจัดการกลุ่มผู้ใช้งาน ตัวระบบมันจะรู้ได้ยังไงว่าหน้าที่ใช้งานอยู่ในขณะนี้ืคือ module ไหน แล้วก็ submoduleID เป็นอะไร เพื่อที่มันจะได้ไปตรวจสอบสิทธิในการเข้าใช้งานแต่ละหน้าอ่ะครับ ตอนนี้ติดเรื่องนี้อย่างเด๋วว่ามันจะเชื่อมกันอย่างไร

zankumuro

อย่าเชื่อผมมาก ผมมันมั่ว.....ฮ่าๆ

ฝาก Like แฟนเพจหน่อยครับ
https://www.facebook.com/devsignup

ข่าวสารวงการเกมส์ ทริปทริคต่างๆ เกมส์แจกฟรี
https://www.wecanplay.in.th/

AbuseMan

ของผมที่ผมทำใช้เองผมกำหนดค่าว่าแต่ละเมนูต้องมี Access ชื่อว่าอะไรถึงจะเข้าได้อ่ะครับ

แล้วกำหนดแยกเป็นของใครของมันเลยอ่ะครับ เก็บไว้ใน Database เวลาใช้ก็ดึงค่ามาเช็คเอาอ่ะคับ

serialize , unserialize
█ [direct=https://radio.sukson.com]ฟังเพลงออนไลน์[/direct] : เว็บเพลงออนไลน์ที่คุณขอฟังเพลงได้ด้วยตัวคุณเอง
█ [direct=https://chat.sukson.com]ห้องแชท[/direct] : บริการฟรีห้องแชทสำหรับติดเว็บ
█ [direct=https://music.sukson.com]เพลงใหม่[/direct] : เพลงใหม่ เพลงฮิต
█ [direct=https://bankumka.com]บ้านคุ้มค่า[/direct] : ลงประกาศขายบ้าน ที่ดิน พร้อมอัพเดทโครงการบ้านและคอนโดใหม่ที่น่าสนใจ

DevPresso

ผมไม่แน่ใจว่าผมเข้าใจปัญหาคุณถูกต้องหรือป่าวนะคับ คือผมเข้าใจว่า จะอ้างอิง permission ในขณะใช้งาน module นั้นๆ อย่างไรใช่มั๊ยคับ
ถ้าใช่ ก็ วิธีผม ก็คือ นำ  module name ไปนะระบุ path ตำแหน่ง module นั้นๆครับ ก็คือ module name ก็จะตรงกันกับ ชื่อ folder module นั้นๆ
ส่วน permission แต่ละ module ผมก็กำหนดเป็น add edit delete view  โดยใช้ ค่าที่เรากำหนด ตาม level ของผู้ใช้งาน อีกทีครับ

*~เก้าคุง~*

อ้างถึงจาก: DevPresso ใน 07 ธันวาคม 2011, 01:26:18
ผมไม่แน่ใจว่าผมเข้าใจปัญหาคุณถูกต้องหรือป่าวนะคับ คือผมเข้าใจว่า จะอ้างอิง permission ในขณะใช้งาน module นั้นๆ อย่างไรใช่มั๊ยคับ
ถ้าใช่ ก็ วิธีผม ก็คือ นำ  module name ไปนะระบุ path ตำแหน่ง module นั้นๆครับ ก็คือ module name ก็จะตรงกันกับ ชื่อ folder module นั้นๆ
ส่วน permission แต่ละ module ผมก็กำหนดเป็น add edit delete view  โดยใช้ ค่าที่เรากำหนด ตาม level ของผู้ใช้งาน อีกทีครับ
ถูกต้องแล้วครับ คือผมไม่รู้จะไปเชื่อมกันยังไง พอได้ไอเดียแล้วครับ

DevPresso

ตัวอย่างfunction checkmodule บางส่วนของผมคับ คิดว่าเห็นแบบนี้น่าจะนึกภาพออกเลย


$modulepage="modules/".$mod."/".$page.".php";
$module="modules/".$mod."/";

marus


Quize

อ้างถึงจาก: marus ใน 07 ธันวาคม 2011, 08:49:03
ลองใช้ zend framework ดู ชื่อ library ว่า acl

ตัวนี้น่าใช้ดีครับ  http://www.jquerytips.com/blogs/view/979/%E0%B8%A1%E0%B8%B2%E0%B8%81%E0%B8%B3%E0%B8%AB%E0%B8%99%E0%B8%94%E0%B8%AA%E0%B8%B4%E0%B8%97%E0%B8%98%E0%B8%B4%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%80%E0%B8%82%E0%B9%89%E0%B8%B2%E0%B8%96%E0%B8%B6%E0%B8%87%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2-Zend-ACL-%E0%B8%81%E0%B8%B1%E0%B8%99%E0%B8%94%E0%B8%B5%E0%B8%81%E0%B8%A7%E0%B9%88%E0%B8%B2
[direct=http://my.up2vps.com/aff.php?aff=060]VPS คุณภาพ ราคาไม่แพง ซัพพอต ok จากการใช้งานจริง[/direct] | [direct=http://lowpriceshoptoday.info]lowpriceshoptoday[/direct] | [direct=http://lowpricemalltoday.info]lowpricemalltoday[/direct] | [direct=http://www.thaiseoboard.com/index.php?action=profile;u=6101]Quize[/direct]

bonshington

join 3 table ข้อเสียคือ เมื่อ user มากๆเข้า ระบบจะทำงานหนักไปนะ

ถ้าเป็นแนว wp จะเป็นคร่าวๆราวๆนี้
table user
id(pk) int
name varchar

table permission
user(fk) int
permission varchar เช่น USER_CAN_POST, USER_CAN_EDIT_POST หลักๆคือ {MODULE}_{ACTION}_{TARGET}

แต่ถ้าเป็นผมออกแบบราวๆนี้
table user
id(pk) int
name varchar
permission varchar เช่น |USER_CAN_POST|USER_CAN_EDIT_POST| เอา pipe คั่น
ถึงเวลาใช้ ก็ split หรือ like %|PERMISSION_NAME|% จะง่ายกว่า เร็วกว่า index น้อยกว่า แต่จะช้าในกรณีที่ต้องการค้นหา user ด้วย permission เช่นว่า ใครทำอะไรได้บ้าง

แต่วิธีแก้ ให้ใช้ postgres จะได้เป็น
table user
id(pk) int
name varchar
permission varchar[]
มันเป็น array เก็บง่าย ใช้ง่าย indexง่าย ไม่ต้อง join

ส่วน group
table role
name varchar(pk)
permission varchar

เวลาเลือก group ก็
update user
set permission = role.permission <- aggregate เอาเอง
from role
where id = ... and role.name = ...


*~เก้าคุง~*