Yetki tanımı hakkında

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
cengaver
Üye
Mesajlar: 111
Kayıt: 01 Nis 2014 05:02
Konum: İstanbul

Yetki tanımı hakkında

Mesaj gönderen cengaver »

Günaydın,

Kendim için bir altyapı oluşturmaya çalışıyorum, bu noktada temel düzeyde birçok bilgi eksikliğim var. Bunlar kitaplarda yazılmayan konular olduğu için ve etrafımda da benden başka meslektaş bulunmadığı için burada sorma ihtiyacı duydum, umarım fikirlerinizi paylaşmakta çekinmezsiniz.

Yapmak istediğim aslında yetkiler, kullanıcı hakları, oturumlar ve makine seçenekleriyle ilgili, sadede geleyim;

Bir class oluşturmak istiyorum ama bu class'da hangi özelliklerin ve davranışların olacağına karar veremedim.

Class'ın bir kaç amacı var;

1) Kullanıcı bilgilerini tutacak
2) Makine bilgilerini tutacak
3) Modüllerin, terminal ve kullanıcı arasındaki kullanım haklarını barındıracak (yani bu bilgisayarda kasa modülünü kullanamazsın gibi bişey (mesela teknik servisin olduğu yerde banka hareketlerini bilgisayar bazında kısıtlayabilmek gibi (sadece bir örnek)))
4) Kullanıcıların yetkilerini denetleyecek

Bu amaçlara uygun bir sınıfın elemanları neler olmalı?

Şimdiden teşekkürler
Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 713
Kayıt: 28 Nis 2011 10:33
Konum: İstanbul

Re: Yetki tanımı hakkında

Mesaj gönderen greenegitim »

Modul adı kullanıcı kodu yetkiler

Modul=Banka
Kullanıcıkodu=003
Yetki Kullanıcıkodu=003 Modul Adı=Banka Formagiris='E', Kayıtsilme='H'
Forma girdiğinde kullanıcı, program kullanıcı kodunu alıp yetkilerde sorgulama yapacak 003 kullanıcı kodunun bankamodülünde yetkileri neler giriş evet se girsin
silme hayır ise sile bastığında kontrol etsin if yetki_sil='H' then showmessage('Silme İşlemi İçin Yetkiniz yok'); interneten muhasebe programlarının demosuna da bakabilirsin.
Mücadele güzelleştirir!
Kullanıcı avatarı
cengaver
Üye
Mesajlar: 111
Kayıt: 01 Nis 2014 05:02
Konum: İstanbul

Re: Yetki tanımı hakkında

Mesaj gönderen cengaver »

Ben zaten internetten araştırma yapıyorum (ki İnternetteki bilgiler genelde çorba oluyor,) benim asıl istediğim sizin kendi fikirleriniz, görüşleriniz.

Bakın mesela kullanıcılar ve nesneler arasında benim aklıma rol kavramı geliyor. Mesela genel geçer yetkileri (yani modül atamalarını) kullanıcılara değil de rollere yaparsak her kullanıcı için yetkileri sil baştan oluşturmaya gerek kalmaz gibi bir fikir var kafamda.

Mutlaka bu tür şeyler düşünmüşsünüzdür, bir görüşünüz bir fikriniz mutlaka vardır
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: Yetki tanımı hakkında

Mesaj gönderen tayipk »

merhaba konuya bende dahil olmak istedim. yetkileri rollere bağlamayı düşünmüşsün peki sana şöyle sorsam laç tane rol tanımı yapmayı düşünüyorsun. senin için yetkilendirme demek sadece ekleme silme düzeltme gibi 3 ana başlıktan ibaretese eyvallah ama benim düşüncemdeki yetkilendirme hiç bir zaman öyle olmadı olamazda. şöyle düşün ben ADMIN kullanıcıyım herşeye yetkim var ama sen de personelsin nasıl bir personelsin örneğin mağaza müdürüsün ben sana alışta satışta iade işlemlerinde ayrı ayrı yetki verebilmeliyim. yani atıyorum senin kullanıcına alışlarda hiç birşey yapamasın ama satışta sadece düzeltme yapabilsin. iadelerde silme hariç herşeyi yapabilsin. diğer kasa personeline ise sadece satışta kayıt yetkisi vermek istiyorum başka hiç bir yetkisi olmasın desem nasıl bir mantık üreteceksin. yani burdan çıkan sonuç şu rollerle yapmak istersen işin biraz uzar gibi. en temizi yetki tablosu oluşturup işlem öncesi yekti konrolü yapmaktır diye düşünüyorum.
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
3ddark
Üye
Mesajlar: 89
Kayıt: 14 Eyl 2010 10:55
Konum: İstanbul

Re: Yetki tanımı hakkında

Mesaj gönderen 3ddark »

Benim daha önce kullandığım mantık şu şekilde belki sana yardımcı olur.
Bir tabloda kullanıcıya ait bilgileri tutacaksın. Login olma vs. bilgileri
(id, kullanici_adi, sifre, ........)

Bir tabloda haklar tutacaksın. Yani kaç tane hakkın olduğunu buradan bileceksin.
(id, yetki_adi)

Bir tablodada hangi kullanıcı hangi yetkilere sahip olduğunu buradan yapacak.
(id, kullanici_id, yetki_id, okuma, yazma, silme)
Okuma varsa forma girebilsin. Yazmada yeni kayıt veya güncelleme işlemlerini yapabilsin. Silmede silme işlemini yapabilsin.

Böylece istediğin kullanıcıya istediğin hakkı verip istediğin gibi kontrol edebilirsin.
Örnek
id bilgilerini farklı verdim ki kafa karaşıklığı olmasın.
(2, HESAPLAR) -----> haklar tablosundaki bilgi (id, yetki_adi)
(5, USER1, 1234, ....) -----> kullanıcılar tablosundaki bilgi (id, kullanici_adi, sifre, ....)
(1, 5, 2, True, True, True) -------> okuma yazma ve silme haklarının tamamı verilmiş durumda.

Buraya bir hak grubu tablosu oluşturup haklar tablosuna bağlarsan hakları gruplayabilirsinde.
Biraz karışık gibi ama bütün işini çözecektir.
PostgreSQL - Delphi - Linux :!:
Kullanıcı avatarı
cengaver
Üye
Mesajlar: 111
Kayıt: 01 Nis 2014 05:02
Konum: İstanbul

Re: Yetki tanımı hakkında

Mesaj gönderen cengaver »

Merhaba,

Yetkileri tek tek kullanıcılara atamak da aslına bakılırsa epey uzun bir iş. Birkaç örnek üzerinden gidelim isterseniz; Görünüşte farklı ama özünde aynı olan 3 farklı yapılanmayı ele alalım; Ama ondan önce yetki tanımlayacağımız programda da 20 tane modül olduğunu bir yere not edelim arkadaşlar;
X yapılanması;

Diyelim ki 100 kişilik bir işletmemiz var bunların %3'ü yönetici, %10'u uzman, %0,1'i patron veya hissedar geri kalanın %50'si saha personeli arta kalanlar da nitelikli personel ve bunların tümü de bir aynı programı kullanıyor diyelim.
Mesela buna sütaş veya aselsan ya da novartis diyelim hiç fark etmez özünde yapılanmaları üç aşağı beş yukarı birbirine benzer (her ne kadar farklı sektörlerde olsalar bile işletme mantığı genelde benzerdir...)
Y Yapılanması;

Diyelim ki bir mağazalar zindiri var ve her mağazada 1 müdür 2 amir, 1 temizlikçi ve 4 satış elemanı var diyelim. Mağaza sayımız da 10 ve üzeri olsun. Bu mağazanın bir de merkezi olsun
Mesela buna da lc waikiki, defacto veya tatlıses lahmancunları diyelim ( aslında profil neredeyse aynı )
Z yapılanması;

Diyelim ki bir bakkalımız var veya bir ganyan bayimiz var ya da ne bileyim bir kuruyemiş dükkanımız var ya da bir çiğ köftecimiz var. Burada da bir patron ve bir de çırak olsun... ( sonuçta küçük ölçekli bir işletme )
---------------------------------------------------

Sonuçta elimizde büyük, orta ve küçük boy ölçekli işletmelerimizin olduğu bir "yelpaze" var.

Şimdi bu üç yapılanmada da yetkileri A ve B modellerine göre dağıtacağız.

A Modeli yetkileri doğrudan kullanıcılara atamayı öngörsün,
B modeli de yetkileri rollere atar. Kullanıcılar da o rollere bağlanır...

----------------------------------------------------

Yetki tanımlarken de yapılacak şeyler var,

1) Eski personelin yetkilerini kaldır veya login bilgilerini pasifize et
2) yeni personein hangi modülleri kullanacağını belirle.
3) Modül bazında personelin "görmemesi veya değiştirememesi gereken alanları" tanımla

------------------------

Gelelim işin özüne;

Eğer kullanıcı bazında yetki dağıtımı yapıyorsak
* Z yapılanmasında pek bir önemi yoktur.
* X yapılandırmasında süreç uzar.
* Y yapılanmasında sonucu etkileyecek olan şey personel sirkülasyonudur.

Sonuçta bir kullanıcı geldiğinde öncelikle hangi modüllere erişeceğini tek tek seçmelisiniz, sonrasında hangi modülde neyi yapabileceğine dair ayrı bir seçim daha yapmanız gerekir. Mesela yeni personel bir müdürse veri girişiyle pek işi olmayacaktır o adam daha çok raporlarla işi olacağı için kontrol odaklı çalışacaktır. Ama yeni personel bir kasiyerse bu sefer de görmemesi gereken bazı detayları ondan gizlemek gerekir.

Eğer Rol bazında yetki dağıtıyorsak

* Z yapılanmasında temelde 2 rol olacağı için yine pek bir önemi yoktur.
* X ve Y yapılanmasında yetkiler rollere atandığı için kullanıcıyı sadece o role bağlamak yeterli olacaktır. Yetki tanımlamak diye bir şey personel girişi veya çıkışında söz konusu olmayacağından iş dramatik bir şekilde daha kolay hale gelir.

sonuç olarak kullanıcı sayısı arttıkça Rol bazında yetki tanımlamak da bir ihtiyaç haline geliyor. Zira sonuçta yetkileri temelde ali'ye versek bile ali'nin o işletmedeki varlık sebebi nihayetinde belli, kasiyerlik yapmak. Eğer terfi ederse ali müdürlüğe, o zaman rolü de değişeceğinden iş basitleşmiş olacaktır.

...diye düşünüyorum ne dersiniz?

Bununla birlikte 3ddark verdiğin örneyi yukarıdaki rol bazlı sisteme uyarlamak çok kolya gibime geliyor, zira haklar, kullanıcılar ve atamalar tablosuna bir de roller tablosu eklenirse tamamlanmış oluyor doğru mu?

tayipk'nın öngördüğü konu (yani kullanıcı kısıtlamaları) rol kavramına ters bir durum oluşturmuyor. Rolün kendisi bir sınır çizdiğinden doğal olarak genel bir kısıtlama aslında getiriyor. Tayipk'nın bahsettiği şey daha çok kişisel bir kısıtlama, yani mesela o diyor ki osman fatura kessin ama yazdıramasın... Bu tür bir durum rol yapısına ek olarak ayrı bir kısıtlamalar tablosunda "şahsal özel" veya "role özel" olmak üzere ayrıca tanımlanabilir.
Kullanıcı avatarı
ender_arslanturk
Kıdemli Üye
Mesajlar: 709
Kayıt: 18 Şub 2005 03:38
Konum: İstanbul

Re: Yetki tanımı hakkında

Mesaj gönderen ender_arslanturk »

Selâmlar,

Yetkilendirme için işaret koyup kaldırabileeğiniz bir ağaç dizini nesnesi kullanarak program düzeyinde genel bir yetki kontrolü gerçekleştirebilirsiniz. Bunun için CheckTreeView nesnesi kullanabilirsiniz.

Örneğin :
Resim

Tek bir veritabanı tablosunda bütün yetkileri kontrol edebilirsiniz..

Bir Örnek oalrak kaydetme kontrolünüz:

Kod: Tümünü seç

procedure TForm1.KaydetClick(Sender: TObject);
var
        Firma, Donemi :String;
begin
        For I:=0 To CheckTreeView.Items.Count-1 Do
        begin
                Firma   :=IntToStr(CheckTreeView.Items[I].SelectedIndex);
                Donemi  :=AnsiReverseString(AnsiLeftStr(AnsiReverseString(Firma),4));
                Firma   :=AnsiReplaceText(Firma,Donemi,'');

                If Donemi<>'' Then
                If StrToInt(Donemi)>100 then //Dönem olamayabilir sadece firma no olabilir diye...
                begin
                          Tablom.Append;
                          TablomFirma.Text        :=  Firma;
                          TablomCalismaYili.Text  :=  Donemi;
                          If CheckTreeView.Items[I].StateIndex=1 Then TablomVisible.Text:='False';
                          If CheckTreeView.Items[I].StateIndex=2 Then TablomVisible.Text:='True';
                          If CheckTreeView.Items[I].StateIndex=3 Then TablomVisible.Text:='State';
                          Tablom.Post;
                end;
                Application.ProcessMessages;
        end;
end;
Yukarıda ki örnekte her çalışma yılını farklı farz ederek kodu modelledim.. Kendinize göre değiştirebilirsiniz. Ayrıca AnsiReverseString stringi ters çevirme kodudur. Mesela Delphi ifadesini ihpleD oalrak ters çevirir. AnsiReplaceText ifadesi ise Cümle içindeki bir ifadeyi değiştirmek için kullanılır. (Bilmeyen yeni arkadaşlar için ara not :) )

Vesselâm..

İyi çalışmalar,
Cevapla