Arsip: Buat Menu akses dengan Otorisasi

 
user image
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]
user image
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.
user image
more 12 years ago

indr4w

Tolong contoh kodingnya donk... Masih bingung neh... Makasih yah..? :cry:
user image
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.
user image
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 :)
user image
more 12 years ago

andrypein

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

cartrun

Waduh ada bilangan biner segala mesti belajar lagi ke semester 1 nich ane kalau gini.' hehe. :roll:
user image
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
user image
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. :D
more ...
  • Pages:
  • 1
Share to

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

Random Topic

Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com