 |
|
ใครพอจะมีแนวทางกำหนดสิทธิ์เข้าใช้งานโปรแกรมของแต่ละ User บ้างครับ |
|
 |
|
|
 |
 |
|
ผมใช้ database ครับ แต่ของผมเขียน web app นะ
หลักการกว้างๆ ของผมคือ ในแต่ละ page user จะทำได้ 4 แบบกับ form คือ view, new, edit, delete
ในตารางกำหนดสิทธิ์ มี column page, userid, view, new, edit, delete อยากให้ user ทำอะไรได้ผมก็ใส่ไว้ตรงนี้
แต่เท่านี้ไม่พอครับ เจ้าของงานเขาอยากให้ไปถึงระดับ กำหนดสิทธิ์ใน control button เลยทีเดียว ปวดหัวครับ
|
 |
 |
 |
 |
Date :
2014-09-16 21:07:56 |
By :
Aod47 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ผมทำ Win App ครับ
คือประมาณว่า อยากทำแบบเปิดหน้าโปรแกรมขึ้นมา
แล้วบล็อกว่าแผนกนี้ให้เปิดการใช้งาน method นี้ได้อีกแผนกไม่ได้
และยังระบุตามตำแหน่งว่าทำอะไรได้บ้างอ่ะครับ
แล้วหากจะแก้ไขก็ไม่ต้องเขียนแล้วคอมไพล์ใหม่ประมาณนั้นครับ
|
 |
 |
 |
 |
Date :
2014-09-17 08:47:11 |
By :
lamaka.tor |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เรื่องการกำหนดสิทธิ์นี่ผมเขียนมาก็เยอะหลสยระบบ แต่ไม่เหมือนกันซักโปรแกรม
มีอยู่ 2 แบบที่ผมเขียน ตามรูป

แบบที่ 1 ใช้แนวคิดแบบ(แบบชื่ออะไรไม่รู้เหมือนกันไม่ได้คิดไว้) คือเมื่อเพิ่มผู้ใช้ไปแล้ว โปรแกรมจะไปเพิ่มในตาราง tblsystems และ tblprivilage ที่เราสร้างไว้ด้วย พอผู้ใช้กด button หรือเข้าเมนูนั้นให้เราสร้าง sub function เช็คดูอีกที

เมื่อมีการเรียกใช้งาน Form ก็ให้เช็ค โดยการส่งระหัสของระบบเข้าไปเช็คดู
Code (VB.NET)
Private Sub frmMember_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown
Try
CheckPrivilege("00001")
Catch ex As Exception
Me.Close()
MessageBox.Show("คุณไม่มีสิทธิการเข้าใช้งานในส่วนนี้", "สิทธิการเข้าถึง", MessageBoxButtons.OK, MessageBoxIcon.Warning)
End Try
End Sub
Code (VB.NET)
Public Function CheckPrivilege(ByVal sysid As String) As Boolean
Thipmanee_Media_Network_Customer_Management_System.MDIMain.Reconnect()
Dim strPrivilege As String = String.Format("SELECT tblprivilege.*,tblsystem.* FROM tblprivilege,tblsystem WHERE tblprivilege.SystemID = tblsystem.SystemID AND tblprivilege.EmployeeID = '{0}' AND tblprivilege.SystemID = '{1}' LIMIT 1", Thipmanee_Media_Network_Customer_Management_System.MDIMain.strEmpID, sysid)
MyAd.SelectCommand.CommandText = strPrivilege
MyAd.Fill(DS, "tblprivilege")
If Not Convert.ToBoolean(DS.Tables("tblprivilege").Rows(0)("IsUsing")) Then
Me.Close()
'เข้าไม่ได้ก็ให้มีข้อความ
MessageBox.Show("คุณไม่มีสิทธิการเข้าใช้งานในส่วนนี้", "สิทธิการเข้าถึง", MessageBoxButtons.OK, MessageBoxIcon.Warning)
End If
'เปิด/ปิดปุ่มเพิ่ม
If Convert.ToBoolean(DS.Tables("tblprivilege").Rows(0)("IsAdd")) Then
BindingNavigatorAddNewItem.Enabled = True
Else
BindingNavigatorAddNewItem.Enabled = False
End If
'เปิด/ปิดปุ่มลบ
If Convert.ToBoolean(DS.Tables("tblprivilege").Rows(0)("IsDel")) Then
BindingNavigatorDeleteItem.Enabled = True
Else
BindingNavigatorDeleteItem.Enabled = False
End If
'เปิด/ปิดปุ่มแก้ไข
If Convert.ToBoolean(DS.Tables("tblprivilege").Rows(0)("IsEdit")) Then
TSBSave.Enabled = True
Else
TSBSave.Enabled = False
End If
DS.Tables("tblprivilege").Clear()
Return True
End Function
ตามนี้ครับอธิบายไม่ถูก
================================================================
ส่วนแบบที่สองนั้น ตามรูปภาพที่ 1 จะเห็นว่า ตาราง User จะมี ฟิลดฺ์ที่ชื่อระบบของแต่ละระบบมีค่าเป็น 0 กับ 1 และเอา chekbox มารับค่า ระบบแบบที่สองนี้ถ้ามีการเพิ่มระบบใหม่เข้าไปในโปรแกรมเราก็ต้องไปเพิ่มฟิลด์ใหม่และ Checkbox ใหม่ ซึ่งก็ fix นั่นแหละนะ(ไม่ค่อยยืดหยุ่น) อันนี้จะกำหนดได้แค่ เข้าระบบได้หรือไม่ได้เท่านั้น ซึ่งถ้าเข้าได้แล้วนั้นเข้าไปทำอะไรอันนั้น ก็ต้องเขียนเพิ่มอีกทีอยู่ที่ความต้องการของผู้ใช้และโปรแกรมเมอร์ที่ต้องเขียนว่าจะให้ทำอะไรมั่ง ผมเห็นว่าระบบแบบที่ 1 จะยืดหยุ่นกว่านิดหน่อยที่ผู้ใช้สามารถเพิ่มระบบเองได้ แต่จะมีข้อเสียคือ ระบบที่เพิ่มเข้ามาภายหลัง ผู้ใช้ที่เคยเพิ่มเข้าไปก่อนจะไม่สามารถใช้ระบบที่เพิ่มเข้ามาใหม่ได้ แต่ผมคิดนะ ถ้ามีระบบใหม่เข้ามา โปรแกรมเมอร์ก็ต้องมานั่งเขียนอยู่ดีผมจึงเลือกใช้ แบบที่สองดีกว่า Manage ง่ายและเข้าใจง่ายดี
อันนี้อยู่ที่แนวคิดของโปรแกรมเมอร์แล้วหละครับว่าจะนำไปปรับปรุงเข้ากับการใช้งานของโปรแกรมเราอย่างไร
ปล.ใครมีแนวคิดอื่นช่วยแชร์ด้วยนะครับ ผมก็เขียนมาหลายโปรแกรม ก็มีปัญหากับแนวคิดเรื่องการกำหนดสิทธิ์ของผู้ใช้อยู่พอสมควร ระบบแต่ละระบบไม่เหมือนกันมันปวดหัว อย่างกับความเห็นที่ 1 ว่านั่นแหละครับ อิอิ
*****แบบที่ 1 โปรแกรมเมอร์คนเก่าเขาเขียนไว้ ซึ่งผมนำมาแก้ไขเพิ่มเติมอีกที
|
ประวัติการแก้ไข 2014-09-17 09:22:48
 |
 |
 |
 |
Date :
2014-09-17 09:19:04 |
By :
zarooman |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
แหล่มเลยพอได้แนวทางแระ
ขอบคูณมากครับ
|
 |
 |
 |
 |
Date :
2014-09-17 10:15:23 |
By :
lamaka.tor |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
กลับมาตอบอีกที หลังจากเพิ่งรู้ว่าคุยกันเป็น desktop app
หน้าแตกเลย อิอิ
ถ้าเป็น winform ลองใช้ active directory authentication ดู
|
 |
 |
 |
 |
Date :
2014-09-17 13:48:36 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ครับ
เรื่องนี้ถามเผื่อไว้คาดวาน่าจะอีกนาน
ตอนนี้ทยอยทำ .dll ย่อยไปก่อนถ้ารวมเป็นโปรแกรมใหญ่ทั้งระบบคงต้องได้ใช้
ตอนนี้ระบบยังอยู่ในระดับหน่วยงานอยู่ครับ
|
 |
 |
 |
 |
Date :
2014-09-17 14:08:03 |
By :
lamaka.tor |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
แนวๆ นะครับ ผมใช้ SharpDevelop
void Button1Click(object sender, EventArgs e)
{
string lavel = "TC3" ;
string lavell = "TC2";
string lavelll = "TC1" ;
if(txpass.Text != "")
{
if(chackuser(txpass.Text) == true)
{
groupBox1.Visible = true ;
txpass.Text = "";
txpass.Visible = false ;
button1.Visible = false;
tbpass.Visible = false;
label1.Text = "";
if(lblavalll.Text == lavel)
{
menuStrip1.Enabled = true;
//comboBox1.Enabled = true;
button3.Enabled = true;
button4.Enabled = true;
button5.Enabled = true ;
}
else
{
if(lblavalll.Text == lavell)
{
menuStrip1.Enabled = false;
//comboBox1.Enabled = true;
button3.Enabled = false;
button4.Enabled = false;
button5.Enabled = true ;
}
else
{
menuStrip1.Enabled = false;
//comboBox1.Enabled = false;
button3.Enabled = false;
button4.Enabled = false;
button5.Enabled = true ;
}
}
}
else
{
label1.Text = "No..User";
tmreset.Enabled = true ;
}
}
else
{
label1.Text = "No..DATA";
tmreset.Enabled = true ;
}
}
|
 |
 |
 |
 |
Date :
2014-09-17 16:10:25 |
By :
ต๋องคับ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|

|
 |
 |
 |
 |
Date :
2018-03-20 15:21:35 |
By :
tomsmile05 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|