ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingจะออกแบบระบบ Permission เหมือนของพวก CMS อย่างไรครับ
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: จะออกแบบระบบ Permission เหมือนของพวก CMS อย่างไรครับ  (อ่าน 1921 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
*~เก้าคุง~*
สายตรวจเสียวบอร์ด
Moderator
เจ้าพ่อบอร์ดเสียว
*****

พลังน้ำใจ: 136
ออฟไลน์ ออฟไลน์

กระทู้: 4,097



ดูรายละเอียด
« เมื่อ: 07 ธันวาคม 2011, 00:32:53 »

คือตอนนี้กำลังทำระบบคล้ายๆ 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
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 113
ออฟไลน์ ออฟไลน์

กระทู้: 1,036



ดูรายละเอียด เว็บไซต์
« ตอบ #1 เมื่อ: 07 ธันวาคม 2011, 00:35:56 »

สู้เขาครับ  Cry
บันทึกการเข้า

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

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

ข่าวสารวงการเกมส์ ทริปทริคต่างๆ เกมส์แจกฟรี
https://www.wecanplay.in.th/
AbuseMan
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 104
ออฟไลน์ ออฟไลน์

กระทู้: 1,104



ดูรายละเอียด เว็บไซต์
« ตอบ #2 เมื่อ: 07 ธันวาคม 2011, 00:39:32 »

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

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

serialize , unserialize
บันทึกการเข้า

ฟังเพลงออนไลน์ : เว็บเพลงออนไลน์ที่คุณขอฟังเพลงได้ด้วยตัวคุณเอง
ห้องแชท : บริการฟรีห้องแชทสำหรับติดเว็บ
เพลงใหม่ : เพลงใหม่ เพลงฮิต
บ้านคุ้มค่า : ลงประกาศขายบ้าน ที่ดิน พร้อมอัพเดทโครงการบ้านและคอนโดใหม่ที่น่าสนใจ
DevPresso
ก๊วนเสียว
*

พลังน้ำใจ: 79
ออฟไลน์ ออฟไลน์

กระทู้: 202



ดูรายละเอียด เว็บไซต์
« ตอบ #3 เมื่อ: 07 ธันวาคม 2011, 01:26:18 »

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

*~เก้าคุง~*
สายตรวจเสียวบอร์ด
Moderator
เจ้าพ่อบอร์ดเสียว
*****

พลังน้ำใจ: 136
ออฟไลน์ ออฟไลน์

กระทู้: 4,097



ดูรายละเอียด
« ตอบ #4 เมื่อ: 07 ธันวาคม 2011, 01:31:05 »

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

พลังน้ำใจ: 79
ออฟไลน์ ออฟไลน์

กระทู้: 202



ดูรายละเอียด เว็บไซต์
« ตอบ #5 เมื่อ: 07 ธันวาคม 2011, 01:50:28 »

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

โค๊ด:
$modulepage="modules/".$mod."/".$page.".php";
$module="modules/".$mod."/";
« แก้ไขครั้งสุดท้าย: 07 ธันวาคม 2011, 01:51:18 โดย DevPresso » บันทึกการเข้า

marus
ก๊วนเสียว
*

พลังน้ำใจ: 41
ออฟไลน์ ออฟไลน์

กระทู้: 467



ดูรายละเอียด
« ตอบ #6 เมื่อ: 07 ธันวาคม 2011, 08:49:03 »

ลองใช้ zend framework ดู ชื่อ library ว่า acl
บันทึกการเข้า
Quize
Verified Seller
ก๊วนเสียว
*

พลังน้ำใจ: 111
ออฟไลน์ ออฟไลน์

กระทู้: 304



ดูรายละเอียด เว็บไซต์
« ตอบ #7 เมื่อ: 07 ธันวาคม 2011, 09:02:57 »

ลองใช้ 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
บันทึกการเข้า

bonshington
ก๊วนเสียว
*

พลังน้ำใจ: 47
ออฟไลน์ ออฟไลน์

กระทู้: 376



ดูรายละเอียด
« ตอบ #8 เมื่อ: 07 ธันวาคม 2011, 10:37:56 »

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 = ...

« แก้ไขครั้งสุดท้าย: 07 ธันวาคม 2011, 12:55:54 โดย bonshington » บันทึกการเข้า
*~เก้าคุง~*
สายตรวจเสียวบอร์ด
Moderator
เจ้าพ่อบอร์ดเสียว
*****

พลังน้ำใจ: 136
ออฟไลน์ ออฟไลน์

กระทู้: 4,097



ดูรายละเอียด
« ตอบ #9 เมื่อ: 07 ธันวาคม 2011, 14:58:53 »

โอ้ววว ขอบคุณมากครับ
บันทึกการเข้า
หน้า: [1]   ขึ้นบน
พิมพ์