Jak zabezpečit aplikaci v ASP.NET – rozhraní pro správu uživatelů

18. září 2002

Je sice hezké ověřovat uživatele vůči XML souboru, ale pokud musíte tento soubor editovat ručně, je to poněkud nepraktické. Podívejme se tedy, jak přidávat a mazat jednotlivé uživatele.

Pro přidávaní nových uživatelů si vytvoříme formulář, který bude mít dvě vstupní pole (jméno a heslo) a odesílací tlačítko pro uložení změn.

Pod tento jednoduchý formulář umístíme ovládací prvek DataGrid, ve kterém budeme zobrazovat seznam uživatelů. DataGrid je serverový ovládací prvek rozsáhlých možností, ze kterých dnes využijeme pouze malý zlomek. Povšimněte si, že k základnímu obsahu DataGridu, který se vytvoří automaticky při běhu, je přidán další sloupec, ve kterém je umístěn serverový ovládací prvek ButtonColumn.

Celý kód vizuálního vzhledu formuláře, který umístíme do souboru userman.aspx bude vypadat zhruba takto:

<%@ Page language=“c#“ Codebehind=“userman.aspx.cs“ AutoEventWireup=“false“ Inherits=“login4.userman“ %>
<!DOCTYPE HTML PUBLIC „-//W3C//DTD HTML 4.0 Transitional//EN“ >
<HTML>
<HEAD>
<title>userman</title>
<meta name=“GENERATOR“ Content=“Microsoft Visual Studio 7.0″>
<meta name=“CODE_LANGUAGE“ Content=“C#“>
<meta name=“vs_defaultClientScript“ content=“JavaScript“>
<meta name=“vs_targetSchema“ content=“http://schemas.microsoft.com/intellisense/ie5″>
</HEAD>
<body MS_POSITIONING=“GridLayout“>
<form id=“userman“ method=“post“ runat=“server“>
<asp:DataGrid id=“uzivatele“ style=“Z-INDEX: 101; LEFT: 40px; POSITION: absolute; TOP: 112px“ runat=“server“ Width=“376px“ Height=“213px“ BorderColor=“#CC9966″ BorderStyle=“None“ BorderWidth=“1px“ BackColor=“White“ CellPadding=“4″>
<SelectedItemStyle Font-Bold=“True“ ForeColor=“#663399″ BackColor=“#FFCC66″></SelectedItemStyle>
<ItemStyle ForeColor=“#330099″ BackColor=“White“></ItemStyle>
<HeaderStyle Font-Bold=“True“ ForeColor=“#FFFFCC“ BackColor=“#990000″></HeaderStyle>
<FooterStyle ForeColor=“#330099″ BackColor=“#FFFFCC“></FooterStyle>
<Columns>
<asp:ButtonColumn Text=“Delete“ CommandName=“Delete“></asp:ButtonColumn>
</Columns>
<PagerStyle HorizontalAlign=“Center“ ForeColor=“#330099″ BackColor=“#FFFFCC“></PagerStyle>
</asp:DataGrid>
<asp:Panel id=“Panel1″ style=“Z-INDEX: 102; LEFT: 40px; POSITION: absolute; TOP: 16px“ runat=“server“ Width=“416px“ Height=“72px“>
<P>Nový uživatel<BR>
Jmémo:
<asp:TextBox id=“strJmeno“ runat=“server“></asp:TextBox><BR>
Heslo:  
<asp:TextBox id=“strHeslo“ runat=“server“></asp:TextBox>                      
<asp:Button id=“uloz“ runat=“server“ Width=“111px“ Text=“Vložit uživatele“></asp:Button></P>
</asp:Panel>
</form>
</body>
</HTML>

Nejprve si vytvoříme funkci pro naplnění Datagridu obsahem XML souboru. Tuto funkci budeme používat nejen při prvním načtení stánky, ale i při přidání uživatele nebo jeho smazání.

Ve funkci nejprve vytvoříme DataSet, který naplníme obsahem XML souboru s uživateli. V dalším kroku si vybereme příslušnou tabulku a umístíme ji do DataGridu, který se v našem případě jmenuje uzivatele.

private void napln()
   {
      DataSet ds=new DataSet();
      FileStream fs = new FileStream(Server.MapPath(„uzivatel.config“),FileMode.Open,FileAccess.Read);
      StreamReader reader= new StreamReader(fs);
      ds.ReadXml(reader);
      fs.Close();
      DataTable users =ds.Tables[0];
      uzivatele.DataSource=users;
      uzivatele.DataBind();
   }

Výše uvedená funkce tedy zajistí naplnění DataGridu, ale pro její provedení ji musíme nějakým způsobem vyvolat. Jako jednu z možností lze použít funkci Page_Load, která se provádí při každém načtení stránky:

private void Page_Load(object sender, System.EventArgs e)
   {
      napln();
      }

Pro mazání i přidávání uživatelů lze použít obecně stejný postup, který lze definovat těmito třemi kroky:

  • načíst obsah XML souboru do DataSetu
  • modifikovat DataSet (přidat či odstranit řádek)
  • uložit DataSet do XML souboru

Nyní vytvoříme funkci, která bude svázána s tlačítkem uloz ve formuláři pro přidání uživatele. Ve funkci zpracujeme hodnoty z strJmeno a strHeslo z formuláře a pokud jsme se rozhodli kódovat hesla provedeme zakódování hesla pomocí metody HashPasswordForStoringInConfigFile, která je součástí objektu FormsAuthentication ze jmenného prostoru System.Web.Security. Následně načteme obsah XML souboru do DataSetu pomocí DataRow přidáme do DataSetu další řádek, který naplníme údaji z formuláře a celý DataSet uložíme zpět do souboru XML. Jako poslední krok „zavoláme“ funkci napln, která nám aktualizuje DataGrid uzivatele.

private void Uloz_Click(object sender, System.EventArgs e)
   {       string jmeno=strJmeno.Text;
      string heslo=FormsAuthentication.HashPasswordForStoringInConfigFile(strHeslo.Text,“SHA1″);
      DataSet ds=new DataSet();
      FileStream fs = new FileStream(Server.MapPath(„uzivatel.config“),FileMode.Open,FileAccess.Read);
      StreamReader reader= new StreamReader(fs);
      ds.ReadXml(reader);
      reader.Close();
      fs.Close();
      DataRow uzivatel= ds.Tables[0].NewRow();
      uzivatel[„jmeno“]=jmeno;
      uzivatel[„heslo“]=heslo;
      ds.Tables[0].Rows.Add(uzivatel);
      fs = new FileStream(Server.MapPath(„uzivatel.config“),FileMode.Create,FileAccess.ReadWrite);
      StreamWriter writer= new StreamWriter(fs);
      ds.WriteXml(writer);
      writer.Close();
      fs.Close();
      napln();
   }

A konečně se dostáváme ke smazání uživatele. Vytvoříme funkci smazatzaznam, která bude „zavolána“ po klepnutí na Delete v příslušném řádku DataGridu. Ve funkci podobně jako ve funkci Uloz_Click načteme XML soubor do DataSetu a po jeho modifikaci ho uložíme zpět do XML souboru.

Vlastní modifikace spočívá v nalezení příslušného řádku v DateSetu. K tomu využijeme vlastnost ItemIndex, která je obsažena v parametru funkce.

Možná vás zarazí co v kódu dělá podmínka, která testuje obsah proměnné aktualni? Tato podmínka pouze zabrání smazání prvního záznamu XML souboru. Je zde proto, abyste při zkoušení příkladu nemohli nechtěně smazat všechny záznamy.

Díky známému indexu věty v DataSetu najdeme větu snadno pomocí příkazu DataRow radek= ds.Tables[0].Rows[aktualni]; a odstranime pomoci radek.Delete();

private void smazatzaznam(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
   {
      int aktualni= e.Item.ItemIndex;
      if (aktualni>0)
      {
         DataSet ds=new DataSet();
         FileStream fs = new FileStream(Server.MapPath(„uzivatel.config“),FileMode.Open,FileAccess.Read);
         StreamReader reader= new StreamReader(fs);
         ds.ReadXml(reader);
         reader.Close();
         fs.Close();
         DataRow radek= ds.Tables[0].Rows[aktualni];
         radek.Delete();
         fs = new FileStream(Server.MapPath(„uzivatel.config“),FileMode.Create,FileAccess.ReadWrite);
         StreamWriter writer= new StreamWriter(fs);
         ds.WriteXml(writer);
         writer.Close();
         fs.Close();
         napln();
      }
         else
      {
         Response.Write(„tento zaznam nemazu“);
      }
   }

Tím máme dnešní aplikaci hotovou. Umíme do XML souboru přidat nový záznam a umíme také záznam smazat. Asi nemusím připomínat, že tento postup můžete využít i v jiných aplikacích, než je tato. Zdrojové kódy dnešního snažení jsou samozřejmně k dispozici.

Štítky: Články

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *