 |
ขอคำแนะนำการเก็บสิทธิ์การเข้าถึงข้อมูล ในรูปแบบ tree ครับ |
|
 |
|
|
 |
 |
|
อืม
ผมคิดว่า อย่างแรก ทั่วๆ ไปพอเข้าใจได้ง่ายดีคับ
แต่อย่างที่คุณบอก คุณอยากเห็น K
ดังนั้นผมคิดว่ามันไม่ใช่ปัญหา เรามองข้ามส่วน รูปภาพนี้ไปเลย และกำหนด เอาเอง โดยอิงจากรูป และสามารถมีข้อยกเว้นได้
|
 |
 |
 |
 |
Date :
2011-11-23 20:48:47 |
By :
pjgunner.com |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
งง ครับ
คือ ต้องบอกก่อนว่า โครงสร้างนี้ ใช้กับแทบทุกจุดใน การเข้าถึงโปรแกรมอ่ะครับ ทั้งเอาไปทำ drop down หรือ query
ดังนั้น จึงอยากได้การเก็บข้อมูลเข้า DB อ่ะครับ ว่า ควรเก็บแบบไหนดี
ตอนนี้ ที่คิดได้คือ เก็บตาราง user เป็น field หนึ่งไว้ โดยเก็บในรูปของ id node แม่ที่ต้องการ เช่นตามตัวอย่าง ถ้าต้องการเหนหมด ก้อเก็บ ID A ไว้
แต่ถ้าเห็น B F G และ K ก็เก็บ B:K แล้วเอา node ที่เก็บไว้ ไป explode เป็น array แล้ว ไป query หาลูกๆเอาอ่ะครับ
อยากถามความคิดเห็นคนอื่นๆว่า มีวิธีเก็บในรูปแบบอื่นๆ หรือไม่ครับ
|
 |
 |
 |
 |
Date :
2011-11-24 08:08:30 |
By :
ohmsc454 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ที่ผมทำระบบกำหนดสิทธิให้กับเว็บ bts นะครับ มีหลักการคล้ายคุณ ohmsc454 ครับ
แต่ผมจะเก็บข้อมูลทุกโหนดแทน เพื่อป้องกันความซับซ้อนของโปรแกรมไม่ให้มาเล่นงานโปรแกรมเมอร์ 
จะกำหนด tree แบบนี้ครับ
A checkbox
-B checkbox
--F checkbox
--G checkbox
-C checkbox
--H checkbox
-D checkbox
--I checkbox
--J checkbox
-E checkbox
--K checkbox
--L checkbox
กำหนดสิทธิใส่ string ธรรมดาๆ ครับ 
อย่างเช่นสิทธิ
B
F
G
และ
K
ก็เก็บ B,F,G,K ลง db ไปเลย แล้วเวลาแก้ไขสิทธิก็เอาข้อมูลนี้มาเติมให้ checkbox
แต่ถ้าเลือกแค่ F,G แต่ไม่เลือก B จะมองไม่เห็นเมนู F,G ครับ แต่สิทธิเข้ายังเหมือนเดิม 
ปล. ผมจะกำหนดสิทธิโดยใช้ชื่อ folder แทนแต่ละ node ครับเพราะแต่ละ module แยกอยู่คนละ folder กันอยู่แล้ว
|
 |
 |
 |
 |
Date :
2011-11-24 09:22:29 |
By :
num |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอร่วมแชร์นะครับ... เพราะยังไม่เคยทำแบบนี้เหมือนกัน
ปกติตามโครงสร้าง tree โหนดแต่ละโหนดจะเข้าถึงกันได้ทั้งหมด แต่....ถ้าต้องเข้าถึงโหนดในระดับอื่นๆหรือไม่ได้อยู่ติดกันก็ต้องผ่านโหนดที่เป็นทางผ่านก่อนที่จะถึงโหนดที่ต้องการเสมอครับ...
ถ้าเราลองมองมันให็เหมือนกันกับ Folder tree ของ Windows ล่ะครับ การเข้าถึง Folder ต้องมีสิทธิ์ในการเข้าถึงกำกับทุก Folder เสมอ เพราะฉะนั้นถ้าเรากำหนดสิทธิ์ของ user ให้เข้าถึง B, F, G และ K ได้ หรือจะเพิ่มสิทธิ์เพื่อให้เข้าถึงจุดไหนก็ได้ตามต้องการ.... ตรงนี้ไม่รู้ว่าจะแก้ปัญหาให้ จขกท ได้หรือไม่นะครับ
.............................................
เท่าที่ผมเคยสัมผัสมาในเรื่องของการกำหนดสิทธิ์การเข้าถึงเมนูหรือส่วนต่างๆของโปรแกรมนะครับ... ยกตัวอย่างการเขียน web site ก็คือ มีสองส่วน
1. ก็คือตารางการเก็บ user และมีฟิลดิ์เพื่อระบุว่ามีสิทธิ์อะไรในการเข้าถึงได้บ้าง
2. ส่วนของเมนูที่จะแสดงให้เห็นเฉพาะ user ที่มีสิทธิ์เท่านั้น โดยการสร้างตารางขึ้นมาเพื่อเก็บชื่อเมนูต่างๆ โดยที่มีฟิลดิ์ id และ parent id เพื่อเป็นการบอกว่าเมนูไหนอยู่ sub menu ไหนด้วย
ปกติเราจะสร้างเมนูด้วยการ hard code ขึ้นมาเลย ทำให้เราแก้ไขเมนูไม่ค่อยสะดวกนัก ผมจึงใช้วิธีสร้างเมนูขึ้นมาจากตารางของฐานข้อมูล เพราะฉะนั้นมันจึงสามารถ where รายชื่อเมนูตามที่เราต้องการได้เลย และการปรับปรุงเมนูก็โดยการทำหน้าจอเพื่อ insert หรือ edit ได้เลย
วิธีการนี้จะเป็นการกำหนดการเข้าถึงระบบโดยการจำกัดเมนูเท่านั้น แต่ถ้าเพิ่มการตรวจสอบสิทธิ์การเข้าถึงในระดับฟอร์มหรือระดับฟิลดิ์เข้าไปด้วยก็จะทำให้ระบบมีความน่าเชื่อถือมากยิ่งขึ้นครับ
|
 |
 |
 |
 |
Date :
2011-11-24 09:34:41 |
By :
Songkram |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณทุกความเห็นครับ
จาก คห 3 คือเก็บทุกชั้นใน tree โดยใช้ user_id เป็นหลัก ใช่มั้ยครับ
และของ คห 4 คือ ตั้ง tree เมนู เป็นหลัก แล้วเอา user_id ไปจัดกลุ่ม แล้วไปกำหนดให้ แต่ละกลุ่ม สามารถเห็น tree ไหน ได้มั่งรึเปล่าครับ
|
 |
 |
 |
 |
Date :
2011-11-24 09:45:32 |
By :
ohmsc454 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ในแบบของผมก็คือ...
เมื่อ user เข้ามาในระบบ ในขั้นนี้เราจะได้ permission ของแต่ละ user มาก่อนใช่มั้ยครับ โดยอาจจะเก็บในรูปแบบใดก็ได้ตามถนัด
หลังจากนั้นก็ให้ระบบเอา permission ที่ได้มาไปประมวลผลให้อยู่ในรูปของตัวแปร เพื่อเอาไปใช้กับเงื่อนไขในการแสดงเมนู
ยกตัวอย่าง...
Code (PHP)
//ก่อนสร้างเมนูก็จัดการตัวแปร permission ก่อน
$permission = user_permission; //user_permission ได้มาจากตาราง user อาจจะได้มาจากการ POST ข้อมูลมาจากหน้าเพจก่อนหน้าก็ได้
//หลังจากได้ตัวแปรมาแล้วก็เอาไปใส่ในเงื่อนไข
//เนื่องจากเมนูจะถูกสร้างขึ้นมาจากตารางในฐานข้อมูล
//เราจึงสามารถใช้ WHERE เขามาเป็นเงื่อนไขได้ครับ
$sql = "SELECT * FROM menu WHERE $permission";
//เราก็จะได้เมนูเท่าที่เงื่อนไขกำหนดขึ้นมาแสดงเท่านั้น
ถ้าทำตามแค่นี้เราจะได้ระบบการจำกัดสิทธิ์ตามเมนู... แต่ในการเอาไปใช้งานจริงเราต้องจำกัดสิทธิ์ในด้านอื่นๆด้วย เช่น ระดับ module, field, etc......
|
ประวัติการแก้ไข 2011-11-24 11:25:47 2011-11-24 11:26:55
 |
 |
 |
 |
Date :
2011-11-24 11:25:23 |
By :
Songkram |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
จาก คห 3 คือเก็บทุกชั้นใน tree โดยใช้ user_id เป็นหลัก ใช่มั้ยครับ
^
ใช่ครับ แบบง่ายๆ เลยคือ
id | name | permission
1 | doraemon | news,contact,unique_module_name
ประโยช์ก็คือทำแบบนี้แล้วเปิดดูปุ้บจะรู้เลยว่าใครทำอะไรได้บ้างครับ แต่ผมก็ใส่ submenu name เข้าไปด้วยเพราะบางชื่อเป็นแค่การจัดกลุ่มไม่ได้มี module ให้ใช้งานตริง
|
 |
 |
 |
 |
Date :
2011-11-24 16:27:00 |
By :
num |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
แล้วถ้าคนนึงมีมากกว่า 1 กลุ่ม แต่สิทธิ์ในแต่ละกลุ่มไม่เท่ากันอะครับ
|
 |
 |
 |
 |
Date :
2018-01-08 16:03:05 |
By :
Boomder |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
มี trustee หลายกลุ่ม ก็ merge เอาก่อนครับ
|
 |
 |
 |
 |
Date :
2018-01-08 18:10:15 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ผมใช้ตัวนี้มันเจ๋งมากครับ

jQuery Org Chart / Family Chart สร้างโครงสร้าง Chart ขององค์กร
|
 |
 |
 |
 |
Date :
2018-01-08 19:49:50 |
By :
mr.win |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|