Merhaba dostlar,

       Bu makalemde Asp.NET’de rol tabanli uygulamalara geçmeden önce kullanicinin uygulamaya girişinden itibaren kullanıcıyı kontrol edebilmek ve kullanici uygulamaya giriş yapmadan bazı sayfalara ve kontrollere erişim izni vermemek.

Örnek bir uygulama ile yapıyı pekiştirelim.Web uygulaması açarak başlayabiliriz.

 Proje içerisindeki ilk adım site içerisinde yer alan web.config dosyasina gidelim..

<authentication mode=”Windows” /> 

Web.config içerisinde Authentication tipi default Windows olarak belirtilmiştir.

Authentication modları içerisinde Windows ve Forms tiplerine bakalım.

Windows Aut: Bu Authentication tipi Windows Nt veya Active Directory domaininde gerçeklesir. 

Forms Aut : Web uygulamalarinin en çok tercih edilen Authentication tipidir.Bu Authentication tipinin sağlayıcısı cookiedir.Yani giriş yapan kullanıcı bilgileri cookie den sağlanir. 

Evet bu kısmı Forms olarak belirtelim ve kullanıcı için gerekli hesap bilgilerini oluşturalım.

    <authentication mode=”Forms” >
      <forms  defaultUrl=”Default.aspx” loginUrl=”Giris.aspx”>
        <credentials passwordFormat=”Clear”>
          <user name=”sinan” password=”1″/>
        </credentials>
      </forms>
    </authentication>

Kullanici işlemleri için kullanilan snıflar web.config içerisindeki bu ayarlara göre hareket eder.

Kullanılacak olan sınıflar , methodlar ve özlliklerden biraz bahsedecek olursak, 

Bu sınıf için ihtiyac olan namespace

System.Web.Security; 

 

RedirectToLoginPage: LoginUrl de belirtilen adrese yönlendirir. >> Giris.aspx

Authenticate : Kullanıcıdan almış olduğu bilğiler doğrultusunda(Kullanıcı adı ve sifre) sisteme giriş yapmaya calışır(web.config içerisindeki hesap bilgileri ile çalışır). Geriye true/false değeri dönderir.

RedirectFromLoginPage:  Kullanıcı sisteme giriş yapmış ise bu sayfa web.config içerisindeki defaultUrlin sahip olmuş oldugu adrese yönlendirir.2 parametre alır.

1.Parametre Sisteme giriş yapan kullanıcı adi

2.Parametre kullaıcı bilgilerini bir sonrki girişte  hatrlaması(true/false)

Dikkat !: Kullanıcı , izni olmayan bir sayfaya erişmek istiyorsa Giriş.aspx sayfasına yönlendirilir. Burada dikkat edecek olursanuz QueryString’de “returnUrl” parametresi  yer almaktadır.Bu parametres gelmiş olduğunuz sayfanın adresni tutar.Eğer sisteme giriş yaparsanız sizi bu sayfaya yönlendirir.Örnegin Profil.aspx saysına erişmek istiyorsunuz fakat erişim izni olmadığı için sizi Giris.aspx sayfasına yönlendirecektir.

Giris.aspx?returnUrl=Profil.aspx

Evet Projeye dönelim tekrar.

Proje içerisinde “Uye” klasoru oluşturalım ve bu klasore sisteme giriş yapmayan hiç bir kullanıcı erişemesin.Bunun için klasorun içerisinde  Add>>new Item>>Web.config ekleyin.

<?xml version=”1.0″?>
<configuration>
  <system.web>
    <authorization>
      <deny users=”?”/>  Bilinmeyen kullanicilari uzaklastir.
    </authorization>
  </system.web>
</configuration>

“Uye” klasoru içerisinde ekleyeceginiz sayfalara artik sisteme giris yapmayan hiç bir kullanici erisemeyecektir.

Sayfanın bir köşesinde kullanıcının durumuna göre hareket edecek olan bir kontrol yani kullanici giriş yapmış ise Kullanıcının Profil bilgileri eğer giriş yapmamış ise kullanıcının giriş  yapması için bir button yer alın.
Bunun için UserControl kullanacagım. Add>>New Item>>Web User Control “ucDurum”

 MulviView içeriside 2 adet view ekletim.Kullanici sisteme giriş yapmamış ise View1 Aktif,Eğer giriş yapmış ise View  2 aktif olacaktır.Peki Kullanıcının sisteme giriş yapıp yapmadığını nasıl öğrenecegiz.

 if (Page.User.Identity.IsAuthenticated)
{
   lblKullaniciAdi.Text = Page.User.Identity.Name;
   MultiView1.ActiveViewIndex = 1;
}
else
{
  MultiView1.ActiveViewIndex = 0;
}

Page.User.Identity.IsAuthenticated   özelligi sistemde bulunan kullanıcının Authenticated durumuna göre true/false değeri dönderir.Eğer kullanıcı sistem giriş yapmış ise true, else false:)

Çıkış buttonu altında

System.Web.Security.FormsAuthentication.SignOut();

System.Web.Security.FormsAuthentication.RedirectToLoginPage();

SingOut Methodu kullanıcı için oluşturulan cookies bilgileri yok edilir.

RedirectToLoginPage methodu ile ise web.config içerisinde yer alan loginUrl ‘e yönlendirir.

Buraya kadar herşey yolunda fakat kullanıcıyı sisteme nasıl login edecegiz? işte cevabi:)

Giris.aspx sayfasının tasarımı>>

Giriş  butun altında çalışan yapı>>

bool durum = FormsAuthentication.Authenticate(TextBox1.Text,TextBox2.Text);
if (durum)
   FormsAuthentication.RedirectFromLoginPage(TextBox1.Text, CheckBox1.Checked);
  else
    lblMesaj.Text = “Üzgünüm bilgiler yanlış”;

 

Evet örneği  buradan  indirebilirsiniz.Konu hakkında sorularınız için yorum satırına yazmanız yeterli olacaktır.

Bir sonraki makalemde Rol tabanlı kullanıcı işlemlerine yer verecegim.

Nedir bu Virtual methodlar?

Not : Bu konu hakkında bilgi sahibi olmadan önce kalıtım hakkında araştırma yapmanız gerekmektedir.

Sorusuna güzel bir hikaye ile başlayacak olursak:)
                     Düşünün ki bayilik sistemi ile hareket eden bir eğitim kurumusunuz.Tükiyenin bir çok ilinde sizin adınıza sizin eğitimlerinizi  veren bir çok firma yer almaktadır.Bu firmalar sizin eğitiminizi vermeden önce sizinle bir anlaşma yapmak zorundadır.Sonuç olarak her firmanın  kendine göre kuralları vardır.Sizde bu kuralları sizin yerinize eğitim verecek bayi firmalarına uygulatmak zorundasınız.

Kurallar

Eğitim Saati     : 100
Eğitim içerigi   : ingilizce
Sınıf Kontenjanı : 15

Evet bu kurallar sizin ve sizin  adınıza eğitim veren firmalar bu kuralları uygulamak zorundadır.Şimdi buraya kadar olan kısım ile ilgili bir örnek gercekleştirelim.


public class Merkez
    {
        public string EgitimSaati()
        {
            return “100 Saat”;
        }
        public string EgitimIcerigi()
        {
            return “ingilizce”;
        }
        public string Kontenjan()
        {
            return “15″;
        }
    }

 

 class ankaraSube : Merkez
    {
        //ankaraSube Sınıfı Merkez Sınıfından kalıtım almıştır.Sonuc olarak Merkezin kurallarını uygulamak zorundadır.
    }

 

Dikkate edecek olursanız Merkez sınıfı bu konuda çok katı kuralları vardır.İçerisindeki kuralların dışına çıkılmasını kesinlikle istemiyor.
       �
 �
ankaraSube asube = new ankaraSube();  �
MessageBox.Show(asube.EgitimIcerigi());   >>ingilizce
MessageBox.Show(asube.EgitimSaati());     >>100 Saat
MessageBox.Show(asube.Kontenjan());       >>15

Peki Senaryo üzerinde biraz oynama yapalim.Merkez sınıfı katı olmaktan çıksın ve bayilerin bu kurallar içerisinde değişiklik yapmasına izin versin

Yani EgitimIcerigini  100 saat yada 50 saat gibi degiştirebilsin.

Bunun icin Merkez sınıfında ufak bir oynama yapmamız gerekiyor.

public class Merkez
    {
        public virtual string EgitimSaati()
        {
            return “100 Saat”;
        }
        public virtual string EgitimIcerigi()
        {
            return “ingilizce”;
        }
        public virtual string Kontenjan()
        {
            return “15″;
        }
    }

Evet merkez sınıfında yer alan methodlarin içerisinde virtual keywordu dikkatinizi cekmiştir.Bu şu anlama geliyor , kendisinden kalıtım alan sınıflar tarafından  override yani değiştirilebilinir anlamına gelmektedir.Bu sayede bayiler merkezler tarafından uygulanan kurallar içerisine yasal olarak müdahele edebilir ve kendisine göre değiştirebilir.

Not : Değişen yapı  Method ismi degildir Methodun içerisindeki işlevdir bunun icin virtual kullanırız.
AnkaraSube Sınıfına tekrar göz atalim

 class ankaraSube : Merkez
    {
        public override string EgitimIcerigi()
        {
            return “Türkce,Almanca,Fransızca,İngilizce”;
        }
        public override string Kontenjan()
        {
            return “30″;
        }

        public override string EgitimSaati()
        {
            return “400″;
        }
      }

evet Merkez sınıfı içerisindeki istenilen kurallar ezilmiştir.

ankaraSube asube = new ankaraSube();  �
MessageBox.Show(asube.EgitimIcerigi());   >>Türkce,Almanca,Fransızca,İngilizce
MessageBox.Show(asube.EgitimSaati());     >>400 Saat
MessageBox.Show(asube.Kontenjan());       >>30

evet bakın virtual  sayesinde kalıtım almış oldugmuz sınıflarin içerisindeki methodlari ezdik:)

Buna en meşhur olan virtual method

        public override string ToString()
        {
            return base.ToString();
        }

15 Ağustos 2010 | Kategoriler: jQuery | Etiketler: , , ,

       Asp.NET üzerinde jQuery Kullanarak validation kontolu
Evet biliyoruz ki Asp.NET kontrolleri içerisinde Validation kontrolleri var.Fakat  şuna inanırımki açık ve kendi yazmış olduğumuz kodları daha rahat kontrol edilinebilinir inancındayım.Bu doğrultuda  2 yapı arasında jquery Validation kontrolu tercih edebiliriz.
Bu uygulamayı gercekleştirmek icin Kullanmamız gereken 2 Modul var.

Jquery  Download   : http://jquery.com/
JQuery Validate  Plugin  : http://view.jquery.com/trunk/plugins/validate/jquery.validate.js
Konu hakkında Bilgi için : http://docs.jquery.com/Plugins/Validation

Web Form Post  olmadan önce validate()  fonksiyonu tetiklenir ve içerisindeki kontroller gercekleşir.Bu doğrultuda sayfanın post olmasına karar verilir.

Kontrol edilen Inputların yanında  hata mesajları verilir.Bu Mesajlar için ek olarak yapmanız gereken hiç birsey yok çünkü  Validate.js dosyası içerisinde bu konu hakınnda hata mesajları ingilizce olarak yer almaktadır  gereksinim doğrultusunda bu mesajlar türkçeye cevrilebilinir.
jquery.validate.js içerisinden alıntıdır.
Bahsetmiş oldugum hata mesajlari:)

	messages: {
		required: "This field is required.",
		remote: "Please fix this field.",
		email: "Please enter a valid email address.",
		url: "Please enter a valid URL.",
		date: "Please enter a valid date.",
		dateISO: "Please enter a valid date (ISO).",
		dateDE: "Bitte geben Sie ein gültiges Datum ein.",
		number: "Please enter a valid number.",
		numberDE: "Bitte geben Sie eine Nummer ein.",
		digits: "Please enter only digits",
		creditcard: "Please enter a valid credit card number.",
		equalTo: "Please enter the same value again.",
		accept: "Please enter a value with a valid extension.",
		maxlength: $.format("Please enter no more than {0} characters."),
		minlength: $.format("Please enter at least {0} characters."),
		rangelength: $.format("Please enter a value between {0} and {1} characters long."),
		range: $.format("Please enter a value between {0} and {1}."),
		max: $.format("Please enter a value less than or equal to {0}."),
		min: $.format("Please enter a value greater than or equal to {0}.")
	},
Evet Örnek uygulamaya gecelim.

<script src=”Scripts/jquery-1.4.1.js” type=”text/javascript”></script>
    <script src=”Scripts/jquery.validate.js” type=”text/javascript”></script>
    <script type=”text/javascript”>
        $(document).ready(function() {
            $(“#form1″).validate({
                rules:
                {
                    <%=txtAd.UniqueID %>:
                     {
                        minlength: 2,  // Minimum 2 genişliginde
                        maxlength:10, //Maximium 10 genişliginde
                        required: true //Boş gecilemez
                    },
                     <%=txtEmail.UniqueID %>:
                     {                      
                        required: true, //Boş gecilemez
                        email:true  //Girilen değerin emai formatı olması
                    }
                },
            });
        });
    </script>

 

   <form id=”form1″ runat=”server”>
    <div>
        Ad:
        <asp:TextBox ID=”txtAd” runat=”server” /><br />
        Email:
        <asp:TextBox ID=”txtEmail” runat=”server”></asp:TextBox><br />
        <asp:Button ID=”btnSubmit” runat=”server” Text=”Submit” />
    </div>
    </form>

Örnek uygulamayı indirmek için  Kaynak Kodu inndir

15 Ağustos 2010 | Kategoriler: ASP.NET, Genel | Etiketler: , , , ,

Merhaba dostlar, 

Buğün sınıflarımdan 1 tanesinde data kontrollerinden 1 tanesi olan Repeater Data Kontrolünü işliyorduk.Gayet güzel devam eden konu içerisinde sınıftan yükselen akıl dolu fikirler doğrultusunda bir form uygulaması bu kontrol ile yapılabilinirmi sorusu  yöneldi. Soruya istinaden sınıfta yapılan form uygulaması:) 

Kaynak Kodu inndir 

Bu uygulama  içerisinde 

İç içe Repeater Data Kontrolleri kullanışmıştır. 

ItemDataBound , ItemCommand eventleri kullanılmıştır. 
Not : Database .rar dosyası içerisinde script olarak verilmiştir.Execute Etmeniz yeterlidir.Konu kayıtları sadece Yazilim alt Kategorisinde yer almaktadır.Uygulama http://www.frmtr.com/ sitesi baz alınarak gerçekleştirilmiştir. Kod ile ilğili açıklamalar proje içerisinde yer almaktadır.
Örnek Resim 

 

14 Ağustos 2010 | Kategoriler: Object Oriented Programming | Etiketler: , , , ,

              Merhaba dostlar,

Bu makalemde Nesne Yönelimli Programlama mantığı hakkında ufak bir giriş yapacağız.Öncelikle ufak bir senaryo ile sizi havaya sokmam lazım.             

               Yeni kurulan bir sirket hayal edin 4-5 çalisani ile birlikte ve sizde bu sirketin üst düzey yöneticisisiniz.Siz dahil herkes her isi yapiyor isviçre çakisi gibi:)(Muhasebe,Pazarlama,yönetim vs…) Zaman içerisinde bu sirket büyüme yolunda ilerlemeye baslamış personel alımı yapılmıştır.Herkes her isi yapabildigi için yeni gelen personel adaylarındanda bunlar talep edilecektir.Fakat yapılan işler parça halinde olduğu için işi kimin yaptıgı belli olmuyor.Artık işler çoğaldığı için yönetim işleri takip etmekte zorlanmaya başliyor çünkü hangi işi kimin ve ne zaman yaptığı belli değil(Çünkü herkes her isi yapabiliyor)…Sirket içerisinde yapilan Muhasebe hatasindan dolayi sirket büyük bir zarara ugramistir bu hatayi yapan personel isten çıkartılacaktır.Evet bu sirkette herkes her işi yapıyor aynı zamanda kimin ne zaman yaptığı belli olmuyor ve gelin bu sirkette bu hatayı yapan arkadaşı bulun?

Hatayı yapan arkadasi affedebilirsiniz isten cikarmayabilirsiniz ama onu bulup bu hata konusunda uyarmak zorundasiniz.Yapmış oldugu hatadan dolayi ona bu konuda bilgi vermek zorundasınız aksi taktirde bu hata tekrarlanabilir.(Şirketin sonu olabilirdi bu hata) Siz bu şirketin yöneticisisiniz  zor günler sizleri bekliyor.

  • zaman kaybı
  • iş kaybı
  • düzensizlik
  • para kaybı
  • merkezi yönetim mi? Oda ne:)
  • yapılan hatanın kaynağı belli değildir.Belli olsa bile bunu bulmak zordur.

yönetim düzeni yüzünden sirket geriye dogru gitmektedir.(artık bu şirketten adam olmaz,olsada çok zaman alır) Projelerimizde sirket gibidir,içerisinde kullanacagimiz özellikleri sınıflandırmamız gerekmektedir yoksa yukaridaki sirket yönetimi gibi bir projeniz olur:)(Bunu hiç istemeyiz.)

 Not : Günümüz projelerde Object Orianted(Nesne Yönelimli) programlama modeli kullanilmaktadir.(Bir projeyi sağlıklı yürütmenin yolu burdan geciyor)

Evet olayi biraz örnekleyerek götürmek istiyorum.

Sizden projeyi indirmenizi ve proje içerisindeki açıklayı okuyup ona göre hareket etmenizi istiyorum.Bu işlemi yaptıktan sonra Kaldığımız yerden devam edebiliriz.Proje resmi sekildeki gibidir.

Örnek 1 :  *****Inndir*****

 Resimdeki a harflerini b yapın dersem:) biraz zor olur biliyorum.

Evet Can sıkıcı bir durum bunun farkındayım. Simdi bu örnegi indirin ve oradaki açıklamaya göre hareket etmeyi deneyin

Örnek 2:     ******inndir*****.

       Evet size bahsetmek istediğim olay’da buydu kullanım kolaylığı. Şimdi bu örnekte neler kazandık veya ileriye dönük neler kazanabiliriz.

  •  Daha Az zaman
  •  Kodun anlaşılırlılığı 
  •  Eğer bir hata meydana gelseydi bunu tek 1 yerden yönetirdik
  • Projem düzenliydi

 evet bu ufacık ornekte bunları kazandık:)

Bu makalede amac sizlere Nesne Yönelimli programlamanın amacını göstermekti umarım faydalı olmuştur.Bir sonraki makalem’de görüşmek üzre…

Soru ve önerileriniz için,

info@sinanbaran.com

sinan.baran@bilgeadam.com

13 Ağustos 2010 | Kategoriler: Genel | Etiketler: ,

•Proje ile ilgili tüm birimlerle görüserek ihtiyaç analizi yapar, hedeseri ve dogru teknolojiyi saptar.
•Yazilim gelistirmek için uygun yöntemleri ve kaynaklari seçerek planlama yapar.
•Mantikli veri modellerini ve programlama dillerini seçer.
•Çesitli bilgisayar programlama dillerini kullanarak verimliligi en üst düzeye çikaracak özel programlar tasarlar ve yaratir.
•Programlarin analiz, tasarim, test ve bakim isleriyle ilgilenir.
•Kullanicilarin programlarda karsilastiklari problemleri giderecek çözümler üretir ve egitimlerini verir.
•Gelistirdigi programlarin kullanicilar tarafindan verimli kullanilmasini saglar.
MCPD’nin Uzmanlik Alanlari Nelerdir?

•Veritabani prensipleri, prosedürleri ve performans faktörleri
•SQL Server 2005
•Veritabani ve yazilim güvenlik prosedürleri ve stratejileri
•Iliskisel Veritabani Teorisi
•C# 2.0, ASP.NET 2.0, ADO.NET 2.0
•Web Programlama
•Object Oriented modelleme ve tasarim teknikleri
•Remoting
•IIS 6.0
•XML Web Servisleri
•XML
•Visual Studio .NET 2005
•.NET Framework 2.0
•Visual Studio 2005 Team System
•Proje yönetimi

MCPD Hangi Ünvanlari Alabilir?

•Uygulama Gelistirici / Application Developer
•Yazilim Mimari / Software Architect
•Yazilim Uzmani / Software Expert

13 Ağustos 2010 | Kategoriler: Hatalar | Etiketler: , ,

HATA MESAJI:

“A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 – Could not open a connection to SQL Server) (Microsoft SQL Server, Error: 2)”

Çözüm: Sql Server Servisi Çalismiyordur.Kontrol ediniz.

13 Ağustos 2010 | Kategoriler: ASP.NET | Etiketler: , , ,

Response.Status = “301 Moved Permanently”;

Response.AddHeader(“Location”, “http://www.sinanbaran.com“);

 301 Redirect Moved Permanently

301 Redirect komutunun bu islevinin genel nedenlerinden birtanesi siteleri ziyaret eden botlar 301 Moved Permanently mesajini kendilerine bir nevi emir olarak kabul ederler ve yönlendirildikleri sitenin bu sitenin yeni adresi oldugunu anlarlar.Genelde sayfalarin Google’de indexlenmesi icin cok onemli bir yapidir.

IIS ile 301 Yönlendirme

Internet Servis yöneticisinde yönlendirme yapmak istediginiz dosya ve düzüne sag tiklayip özellikler kismina gelin
“a redirection to a URL” butonuna basin
Nereye yönlendirelecegini seçin
Check “The exact url entered above” and the “A permanent redirection for this resource”
Click on ‘Apply’

13 Ağustos 2010 | Kategoriler: Genel | Etiketler: , , ,

Merhaba arkadaşlar,

Uzun bir aradan sonra blog  yazılarıma tekrar döndüm:)

bu arada önümüzdeki 1 ay içerisinde Object Orianted konuları hakkında makalelerimi yayınlayacağım aynı zamanda örneklerimi hadin görüşürüz:)