Arsip: Buat Menu akses dengan Otorisasi

more 12 years ago
indr4w
Salam
Kang admin, cara membuat tampilan menu dengan otorisasi seperti dibawah ini, gimana yah :
http://2.bp.blogspot.com/-9FHN-w-_EsE/ToULLeFu6iI/AAAAAAAAAFk/iZZlSRIGnqc/s320/otoritas_user.jpg
Salam
Indra[/list][/code]

more 12 years ago
heriy4nt0
cara membuat tampilannya mudah, tinggal drag aja label, editbox, checkbox ke form, juga buttonnya.
cara otoritas juga ndak terlalu sulit,
bayangkan aja di sistem window, ada group ada user,
jadi buat 4 table- table 1.user, 2.group, 3.daftar-menu-aplikasi, 4.groupmenu.
1.Group akan berisi otoritas terhadap menu yang dapat diakses, yg berisi groupid,..dll
2.tabel daftar-menu-aplikasi,terdiri dari menuid,..dll, salah satu field harus menyimpan parameter menu, bisa caption.
3.tambahkan satu tabel groupmenu yg berisi groupid, menuid,otoritas sebagai penghubung Group dan daftar-menu-aplikasi, dan otoritas akses.
4.lalu bentuk rule(proses/procedure) untuk tabel *groupmenu.otoritas dan daftar-menu-aplikasi dari koding aplikasi anda (kalau bisa cukup 1 procedure saja)
5.tabel User terdiri atas username, password,groupid, field groupid berguna sebagai identitas user terhadap group.
6.bentuk query sql join untuk ke 4 table tsb dengan kondisi where username=blabla, sehingga hasilnya memperlihatkan daftar menu yang dapat diakses oleh username. Masukkan hasilnya ke rule yang anda buat pd langkah 4, dan selesai.
Jadi intinya Group yang memiliki otoritas, dan user otomatis memiliki otoritas jika sudah dipasangkan ke group. Dan koding untuk rule (langkah ke 4)..., anda sudah memiliki username,otoritas dan caption menu,-tinggal koding.
ps: sy bukan admin.

more 12 years ago
theodorusap
Numpang comment.
Kalau saya pribadi, lebih suka akses ke database dikurangi, coding dimanipulasi. Sebab ketika sudah ada banyak group, banyak user, banyak menu, dst… maka kemungkinan kombinasi akan semakin banyak, isi data user, group, dll untuk proses pengecekan hak akses akan semakin besar.
Cara menggunakan manipulasi coding : siapkan 1 field “flag†di tabel user (terserah mau digunakan tabel group atau tidak). Field ini yang nanti digunakan untuk menentukan hak akses user terhadap menu, modul, form, dsb dengan menggunakan operasi “and†dan memanfaatkan property “tag†pada object delphi.
Contoh aturan main berikut:
1. tabel user terdiri dari field userid, password, dan flag
(silahkan ditambah informasi field lain sesuai kebutuhan).
2. Semua modul (menuitem atau action) yang property tag < -1 tidak perlu dicek hak aksesnya
3. Super Admin hanya boleh membuat user baik admin maupun user, diberi flag -1
4. Admin punya hak akses atas semua modul termasuk mengedit data user, diberi flag 0
5. Pengaturan flag Modul menggunakan operasi biner (2n) di mana :
- Data supplier diberi flag 1 (20)
- Data Pelanggan diberi flag 2 (21)
- Data Barang diberi flag 4 (22)
- Data Transaksi diberi flag 8 (23)
- dst….
6. Berdasarkan informasi nomor 4 di atas, bisa dibuat variasi hak akses user sebagai berikut :
- User 1 : hanya data supplier : flag = 1
- User2 : hanya data pelanggan : flag=2
- User3 : hanya data barang : flag = 4
- User4 : hanya data transaksi : flag = 8
- User5 : data supplier dan transaksi : flag = 1 + 8 = 9
- User6 : data supplier, Pelanggan dan barang : flag = 1 + 2 + 4 = 7
- User7: semua data : flag = 1 + 2 + 4 + 8 = 15
Untuk masuk ke coding Delphi, siapkan 1 fungsi pengecekan, misalnya :
Function isUserCanAccess(FlagUser, FlagModul : Integer):Boolean;
Begin
If FlagUser = -1 {super admin} then
result := FlagModul = -1
Else if FlagUser = 1 {admin} then
result:=true {punya hak akses atas semua modul}
Else if FlagModul>0 then {selain superadmin dan admin}
Result:= FlagUser and FlagModul <> 0
Else result := false; {tidak memiliki hak akses}
End;
Pada fungsi pengecekan diatas, parameter input FlagUser diambil dari tabel user pada database setelah user login, sementara Flag Modul diambil dari property ‘tag’ pada Delphi form (bisa menu, action, Tedit, Tbutton, Tlabel atau object apapun).
Nilai Property ‘tag’ diset sesuai aturan main hak akses yang diinginkan. Sesuai contoh di atas, maka untuk Semua menu maupun sub menu yang digunakan pada form supplier property ‘tag’-nya diset = 1 (set tag menu di object inspector pada designtime mode).
Dengan demikian ketika user login, yang berhak mengakses menu dan submenu supplier hanya user yang dengan flag 1, 3, 5, 7, 9, 11, 13, dan 15 (dari contoh di atas, maka yang punya akses adalah user1, user5, user6 dan user7).
Cara menggunakan fungsi “isUserCanAccess†di atas, cukup dengan menambah 1 fungsi pengecekan pada form yang berlaku universal untuk mengecek semua menu dan action untuk kemudian secara otomatis diaktifkan atau dinonaktifkan sesuai hak akses.
Misalkan digunakan pada Form1, maka bisa jadi seperti ini :
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ActnList;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
ActionList1: TActionList;
private
{ Private declarations }
public
{ Public declarations }
Procedure UpdateUserAccess(UserFlag : Integer);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
Function isUserCanAccess(FlagUser, FlagModul : Integer):Boolean;
Begin
If FlagUser = -1 {super admin} then
result := FlagModul = -1
Else if FlagUser = 1 {admin} then
result:=true {punya hak akses atas semua modul}
Else if FlagModul>0 then {selain superadmin dan admin}
Result:= FlagUser and FlagModul <> 0
Else result := false; {tidak memiliki hak akses}
End;
Procedure TForm1.UpdateUserAccess(UserFlag : Integer);
var
I:Integer;
C:TComponent;
begin
For I:=0 to componentcount-1 do begin
C:=Components[i];
if (C.Tag>=-1) {<-1 tidak perlu dicek (aturan main nomor 2)}
then begin
if (C is TMenuItem) then {cek semua menu}
TMenuItem(C).Enabled:=isUserCanAccess(UserFlag,C.Tag)
else
if (C is TAction) then {cek semua Action}
TAction(C).Enabled:=isUserCanAccess(UserFlag,C.Tag)
else
end;
end;
end;
end.
Procedure UpdateUserAccess pada contoh coding di atas cukup dipanggil 1 x setelah login, atau pada saat form mau ditampilkan. Parameter input ‘UserFlag’ diambil dari database.
Ups.... kepanjangan..... tapi mudah-mudahan bisa membantu.
more 12 years ago
indr4w
Aduh thx banget atas masukan dan informasinya, kalau boleh minta lagi neh, lampirkan dalam bentuk sampel jadi file delphinya...
Waduh banyak banget keinginannya yah... tapi lumayanlah nambah2 pahala di bulan ramadhan.
Ok Thx
:)

more 12 years ago
andrypein
jadi gimana om butuh berapa tabel dan apa saja field yang diperlukannya :shock:

more 12 years ago
cartrun
Waduh ada bilangan biner segala mesti belajar lagi ke semester 1 nich ane kalau gini.' hehe. :roll:

more 12 years ago
percyl15
@ mas indr4w : buat otoritas kyk gt sbenernya gampang bgt kok mas...udah di coba blm??? coba deh dikoding dulu...cuma maen2 di sekitar if then...else kok.. hehehe

more 12 years ago
heriy4nt0
procedure ProcessRule4(m:TMenuItem;t:tadoquery)
var i:Integer;
mnu:tmenuitem;
caps:string;
begin
for i:=0 to m.count-1 do
begin
mnu := m[i];
caps:=mnu.caption;
if t.locate('captionmenu',caps) then //<<--locate in query for menu
begin
if t.otoritas = 1 then mnu.enabled:=true //<<---otoritas
else mnu.enabled:=false;
end;
ProcessRule4(m[i];t) ; //<===recursive proc
end;
end;
procedure prosesrule;
var tado:tadoquery;
begin
tado:=tadoquery.create(nil);
tado.connectionstring:=...blablabla
//your connection..blabla
tado.sql.text:=
'select a.username, d.captionmenu, c.otoritas from '+
'from user a '+
'inner join group b on b.idgroup=a.idgroup '+
'inner join groupmenu c on c.idgroup=b.idgroup '+
'inner join daftarmenu d on d.idmenu=c.idmenu '+
'where a.username = blablabla';
//speed your adoquery cause you will using locate func.
tado.disablecontrols;
tado.open;
//enumerate seluruh menu--->>rule ke 4
processrule4(mainmenu1.items,tado) //<<----mainmenu here
tado.close;
tado.free;
end;
Kode diatas cuma contoh.
Sy menggunakan lazarus bukan delphi, semoga sama ya, sy ganti sqldb dengan sqlado. Kode belum ditest, tugas anda ya. :Dmore ...
- Pages:
- 1
reply |
Report Obsolete
AI Forward

🚀 We're thrilled to partner with Alibaba Cloud for "AI Forward - Alibaba Cloud Global Developer Summit 2025" in Jakarta! Join us and explore the future of AI. Register now:
https://int.alibabacloud.com/m/1000400772/
#AlibabaCloud #DeveloperSummit #Jakarta #AIFORWARD
Last Articles
Last Topic
- PascalTalk #6: (Podcast) Kuliah IT di luar negeri, susah gak sih?
by LuriDarmawan in Tutorial & Community Project more 4 years ago - PascalTalk #5: UX: Research, Design and Engineer
by LuriDarmawan in Tutorial & Community Project more 4 years ago - PascalTalk #4: Obrolan Ringan Seputar IT
by LuriDarmawan in Tutorial & Community Project more 4 years ago - PascalTalk #2: Membuat Sendiri SMART HOME
by LuriDarmawan in Tutorial & Community Project more 4 years ago - PascalTalk #3: RADically Fast and Easy Mobile Apps Development with Delphi
by LuriDarmawan in Tutorial & Community Project more 4 years ago - PascalTalk #1: Pemanfaatan Artificial Intelligence di Masa Covid-19
by LuriDarmawan in Tutorial & Community Project more 4 years ago - Tempat Latihan Posting
by LuriDarmawan in OOT more 5 years ago - Archive
- Looping lagi...
by idhiel in Hal umum tentang Pascal Indonesia more 12 years ago - [ask] koneksi ke ODBC user Dsn saat runtime dengan ado
by halimanh in FireBird more 12 years ago - Validasi menggunakan data tanggal
by mas_kofa in Hal umum tentang Pascal Indonesia more 12 years ago
Random Topic
- Bgmn Meng copy file (tabel) ke A:
by Edwin2006 in Hal umum tentang Pascal Indonesia more 19 years ago - pletak pletuk mysqLL
by nurez in MySQL more 19 years ago - import file excel, caranya?
by cyberdhoe in Enginering more 17 years ago - OOT : Ramadhan
by kaka-delphi in OOT more 18 years ago - Tampilan combo box 2 kolom ?
by debby in Hal umum tentang Pascal Indonesia more 17 years ago - Sekolah Ubuntu: kesempatan promosi FreePascal dan Lazarus
by simba in OOT more 17 years ago - tentang quick report
by tian in Lain-lain more 16 years ago - Perintah copy antar drive tidak bekerja
by arjuna_1982 in MsSQL more 16 years ago - cara kirim E-MAIL KE YAHOO
by penyakit_mambu in Tip n Trik Pemrograman more 18 years ago - Inventory Control => Konversi Satuan pada Stock
by machomen in Bedah Kasus more 15 years ago