Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > PHP > PHP Forum > ขอคำแนะนำการเก็บสิทธิ์การเข้าถึงข้อมูล ในรูปแบบ tree ครับ



 

ขอคำแนะนำการเก็บสิทธิ์การเข้าถึงข้อมูล ในรูปแบบ tree ครับ

 



Topic : 069470



โพสกระทู้ ( 28 )
บทความ ( 0 )



สถานะออฟไลน์




ตัวอย่างรูปภาพ tree

ตอนนโครงสร้างของโปรแกรมผม สามารถ มองในรูปแบบ คล้ายๆกับรูปภาพนี้นะครับ คือ มี A เป็น parent node และมีลูกคือ B C D E

B มีลูก เป็น F G

C มีลูก เป็น H

D มีลูก เป็น I J

E มีลูก เป็น K L


ซึ่งในโปรแกรม จะใช้โครงสร้างแบบนี้ ในการกำหนด สิทธ์การเข้าถึงส่วนต่างๆของโปรแกรม

โดยผูก node ที่ต้องการไว้กับ ตาราง user ครับ เช่น ถ้า user ถูกกำหนด ไว้ที่ A นั่นคือ จะสามารถเห็นเมนูทุกๆเมนูใน โปรแกรม

แต่ถ้า ถูกกำหนด ไว้ที่ B จะสามารถเห็น เมนู B F G เท่านั้น

แต่เกิดปัญหาว่า ถ้า ต้องการเห็น เมนู B F G เหมือนเดิม แต่อยากเพิ่ม K เข้ามาอีก 1 เมนู ตามโครงสร้าง tree จะไม่สามารถทำได้

จึงอยากขอความเห็นว่า ควรเก็บสิทธิ์การเข้าถึง ในลักษณะไหน จึงจะสามารถ เข้าถึงข้อมูลในลักษณะนี้ได้บ้างครับ



Tag : PHP, MySQL







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2011-11-23 20:28:33 By : ohmsc454 View : 1927 Reply : 10
 

 

No. 1



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

อืม

ผมคิดว่า อย่างแรก ทั่วๆ ไปพอเข้าใจได้ง่ายดีคับ
แต่อย่างที่คุณบอก คุณอยากเห็น K

ดังนั้นผมคิดว่ามันไม่ใช่ปัญหา เรามองข้ามส่วน รูปภาพนี้ไปเลย และกำหนด เอาเอง โดยอิงจากรูป และสามารถมีข้อยกเว้นได้






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-11-23 20:48:47 By : pjgunner.com
 


 

No. 2



โพสกระทู้ ( 28 )
บทความ ( 0 )



สถานะออฟไลน์


งง ครับ

คือ ต้องบอกก่อนว่า โครงสร้างนี้ ใช้กับแทบทุกจุดใน การเข้าถึงโปรแกรมอ่ะครับ ทั้งเอาไปทำ 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
 

 

No. 3

Guest


ที่ผมทำระบบกำหนดสิทธิให้กับเว็บ 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
 


 

No. 4



โพสกระทู้ ( 314 )
บทความ ( 0 )



สถานะออฟไลน์


ขอร่วมแชร์นะครับ... เพราะยังไม่เคยทำแบบนี้เหมือนกัน

ปกติตามโครงสร้าง 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
 


 

No. 5



โพสกระทู้ ( 28 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณทุกความเห็นครับ

จาก คห 3 คือเก็บทุกชั้นใน tree โดยใช้ user_id เป็นหลัก ใช่มั้ยครับ

และของ คห 4 คือ ตั้ง tree เมนู เป็นหลัก แล้วเอา user_id ไปจัดกลุ่ม แล้วไปกำหนดให้ แต่ละกลุ่ม สามารถเห็น tree ไหน ได้มั่งรึเปล่าครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-11-24 09:45:32 By : ohmsc454
 


 

No. 6



โพสกระทู้ ( 314 )
บทความ ( 0 )



สถานะออฟไลน์


ในแบบของผมก็คือ...

เมื่อ 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
 


 

No. 7

Guest


จาก คห 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
 


 

No. 8

Guest


แล้วถ้าคนนึงมีมากกว่า 1 กลุ่ม แต่สิทธิ์ในแต่ละกลุ่มไม่เท่ากันอะครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2018-01-08 16:03:05 By : Boomder
 


 

No. 9



โพสกระทู้ ( 9,559 )
บทความ ( 2 )



สถานะออฟไลน์


มี trustee หลายกลุ่ม ก็ merge เอาก่อนครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2018-01-08 18:10:15 By : Chaidhanan
 


 

No. 10



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ผมใช้ตัวนี้มันเจ๋งมากครับ



jQuery Org Chart / Family Chart สร้างโครงสร้าง Chart ขององค์กร

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2018-01-08 19:49:50 By : mr.win
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ขอคำแนะนำการเก็บสิทธิ์การเข้าถึงข้อมูล ในรูปแบบ tree ครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 04
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่