Vývojářský blog Tomáše Jechy

  Poslední články
  Období

RSS Feed RSS Feed

.NET Tips   2D   3D   Aplikace   ASP.NET   C#   HTML+CSS   Internet   Javascript   Office   Silverlight   SQL   VB.NET   VB6   VbNet.cz   Vista   VS   Život, vesmír a vůbec   Všechny články

Rozšířený AuthorizeAttribute v ASP.NET MVC

AuthorizeAttribute je základním autorizačním principem v ASP.NET MVC. Odekorování akce nebo celého controlleru dovoluje omezit přístup pouze pro seznam uživatelů, popřípadě rolí poskytovaných RoleProviderem.

V případě neúspěšné autorizace se vrací HttpUnauthorizedResult, který zapíše do výstupu HTTP kód 401 (neautorizovaný přístup) a z něj se provede přesměrování na přihlašovací obrazovku. Pokud chcete po neúspěšné autorizaci přesměrovat jinam, lze to připravit jednoduchým rozšířením právě AuthorizeAttribute:

 /// <summary>
///
Atribut rozšiřující <see cref="AuthorizeAttribute"/> o možnost přesměrovat na jinou adresu než je defaultní přihlašovací v případě neúspěšné autorizace.
/// </summary>
public class AuthorizeRedirectAttribute : AuthorizeAttribute
{
    
/// <summary>
    /// Vrací nebo nastavuje akci, na kterou se provede přesměrování při neúspěšné autorizaci
    /// </summary>
    public string RedirectAction { get; set; }

    
/// <summary>
    /// Vrací nebo nastavuje controller, na který se provede přesměrování při neúspěšné autorizaci
    /// </summary>
    public string RedirectController { get; set; }

    
/// <summary>
    /// Vrací nebo nastavuje route values, které se předají akci při přesměrování při neúspěšné autorizaci
    /// </summary>
    public object RedirectRouteValues { get; set; }

    
public override void OnAuthorization(AuthorizationContext filterContext)
     {
        
base.OnAuthorization(filterContext);

        
// neuatorizovany pozadavek?
        if (filterContext.Result is HttpUnauthorizedResult)
         {
            
// vygenerovat adresu pro presmerovani
            string redirectUrl = new UrlHelper(filterContext.RequestContext).Action(RedirectAction, RedirectController, RedirectRouteValues);

            
// presmerovat
            filterContext.Result = new RedirectResult(redirectUrl);
         }
     }
}

Takto upravenému atributu předáte akci a případně i controller a route values a přesměrování při neautorizovaném přístupu bude obstaráno automaticky. Například:

 [AuthorizeRedirect(RedirectAction = "RegistrationAbout")]
public ActionResult MyProfile()

[Zobrazit článek]

Datum: 28. 1. 2010 13:41
Diskuse: 0
Hodnocení: Tento článek zatím nikdo nehodnotilTento článek zatím nikdo nehodnotilTento článek zatím nikdo nehodnotilTento článek zatím nikdo nehodnotilTento článek zatím nikdo nehodnotil     Zobrazeno: 199x

Kategorie: ASP.NET, C#        

Bojím se platit kartou u Telefonica O2

Nedávno se mi stala nepříjemnost s internetovým připojením. V důsledku výpadku proudu mi odešel ADSL router (pravděpodobně kvůli přepětí v telefonní nebo napájecí síti). Zašel jsem na prodejnu a ihned si nový router chtěl koupil. Dokonce měli jeden na skladě.

Rozhodl jsem se platit kartou. Čekal jsem, že ihned poputuje do terminálu, potvrdím částku a zadám PIN. K mému překvapení se situace vyvíjela trochu jinak. Obsluha začala cosi z karty opisovat do počítače. Nevím které údaje, nevím kam je zapisovala, nevím na co je potřebovala. Vše, co je k provedení a zaevidování transakce potřeba lze zjistit z komunikačního rozhraní terminálu. A nemusím snad upřesňovat, že údaje na kartě jsou to jediné, co dělí kohokoliv od anonymní platby na internetu. Možná je to normální postup, ale mě se to stalo poprvé a dost mě to zarazilo.

Dožadoval jsem se tedy vysvětlení, na co a jaké údaje potřebují. Odpovědi byly velice neuspokojivé. Například jsem se dozvěděl, že si opisují číslo účtu - což byla pro mě velká novinka, nevím totiž o tom, že bych číslo účtu na kartě měl. Ale dobře, asi si pletou číslo účtu a karty. Co jsem ale za boha nemohl zjistit je důvod, proč údaje zapisují ručně a nenechají si je poslat z terminálu, popřípadě proč je neopíšou z výtisku. Nemůžou se přeci zaručit za všechny zaměstnance, že si některý z nich neopíše nenápadně i konfirmační číslo někam do poznámkového bloku a pak si z mé karty neudělá osobního sponzora.

Máte podobné zkušenosti? Zdá se vám tenhle přístup také tak podivný a nebezpečný jako mě?

[Zobrazit článek]

Datum: 26. 1. 2010 18:06
Diskuse: 12
Hodnocení: Hodnocení: 5/5Hodnocení: 5/5Hodnocení: 5/5Hodnocení: 5/5Hodnocení: 5/5     Zobrazeno: 412x

Kategorie: Život, vesmír a vůbec        

.NET Tip #36: 2D hry v XNA

Pokud chcete psát obyčejnou 2D hru v XNA, možná se vám bude hodit následující seznam článku. Jsou v anglickém jazyce.

Články jsou kratší a nabízejí ke stažení zdrojové kódy.

[Zobrazit článek]

Datum: 16. 1. 2010 15:02
Diskuse: 0
Hodnocení: Hodnocení: 5/5Hodnocení: 5/5Hodnocení: 5/5Hodnocení: 5/5Hodnocení: 5/5     Zobrazeno: 313x

Kategorie: 2D, .NET Tips        

XNA SpriteFont - diakritika

Pokud se někdy dostanete do kontaktu s herním XNA enginem, je dost pravděpodobné, že mezi vaše přání bude patřit i vykreslování textů na obrazovku. XNA nabízí možnost použití tzv. spritefontů. Tedy písma, které se při kompilaci vyrenderuje a nás tak nemusí zajímat, zda je písmo na cílovém stroji nainstalováno (v případě Xboxu je to naprosto pochopitelné). Při vytvoření souboru spritefont do složky Content zjistíme, že se jedná o běžný XML soubor definující velikost, typ a rozsahy znaků, které se připraví při kompilaci do projektu.

Pokud se při základním nastavení pokusíte vyrenderovat diakritiku, příliš neuspějete. Implicitní rozsah zahrnutých znaků ji totiž neobsahuje. Získáte tuto chybu:

The character 'ř' (0x0159) is not available in this SpriteFont. If applicable, adjust the font's start and end CharacterRegions to include this character.
Název parametru: character

Připravil jsem proto seznam rozsahů, které zahrnou všechny “české” znaky v podobě malého i velkého písmene:

  <CharacterRegion><Start>&#193;</Start><End>&#193;</End></CharacterRegion> 

  <CharacterRegion><Start>&#268;</Start><End>&#268;</End></CharacterRegion> 

  <CharacterRegion><Start>&#270;</Start><End>&#270;</End></CharacterRegion> 

  <CharacterRegion><Start>&#201;</Start><End>&#201;</End></CharacterRegion> 

  <CharacterRegion><Start>&#282;</Start><End>&#282;</End></CharacterRegion> 

  <CharacterRegion><Start>&#205;</Start><End>&#205;</End></CharacterRegion> 

  <CharacterRegion><Start>&#327;</Start><End>&#327;</End></CharacterRegion> 

  <CharacterRegion><Start>&#211;</Start><End>&#211;</End></CharacterRegion> 

  <CharacterRegion><Start>&#344;</Start><End>&#344;</End></CharacterRegion> 

  <CharacterRegion><Start>&#352;</Start><End>&#352;</End></CharacterRegion> 

  <CharacterRegion><Start>&#356;</Start><End>&#356;</End></CharacterRegion> 

  <CharacterRegion><Start>&#218;</Start><End>&#218;</End></CharacterRegion> 

  <CharacterRegion><Start>&#366;</Start><End>&#366;</End></CharacterRegion> 

  <CharacterRegion><Start>&#221;</Start><End>&#221;</End></CharacterRegion> 

  <CharacterRegion><Start>&#381;</Start><End>&#381;</End></CharacterRegion> 

  <CharacterRegion><Start>&#225;</Start><End>&#225;</End></CharacterRegion> 

  <CharacterRegion><Start>&#269;</Start><End>&#269;</End></CharacterRegion> 

  <CharacterRegion><Start>&#271;</Start><End>&#271;</End></CharacterRegion> 

  <CharacterRegion><Start>&#233;</Start><End>&#233;</End></CharacterRegion> 

  <CharacterRegion><Start>&#283;</Start><End>&#283;</End></CharacterRegion> 

  <CharacterRegion><Start>&#237;</Start><End>&#237;</End></CharacterRegion> 

  <CharacterRegion><Start>&#328;</Start><End>&#328;</End></CharacterRegion> 

  <CharacterRegion><Start>&#243;</Start><End>&#243;</End></CharacterRegion> 

  <CharacterRegion><Start>&#345;</Start><End>&#345;</End></CharacterRegion> 

  <CharacterRegion><Start>&#353;</Start><End>&#353;</End></CharacterRegion> 

  <CharacterRegion><Start>&#357;</Start><End>&#357;</End></CharacterRegion> 

  <CharacterRegion><Start>&#250;</Start><End>&#250;</End></CharacterRegion> 

  <CharacterRegion><Start>&#367;</Start><End>&#367;</End></CharacterRegion> 

  <CharacterRegion><Start>&#253;</Start><End>&#253;</End></CharacterRegion> 

  <CharacterRegion><Start>&#382;</Start><End>&#382;</End></CharacterRegion>

[Pokračování článku]

Datum: 5. 11. 2009 0:41
Diskuse: 4
Hodnocení: Hodnocení: 5/5Hodnocení: 5/5Hodnocení: 5/5Hodnocení: 5/5Hodnocení: 5/5     Zobrazeno: 550x

Kategorie: VB.NET, C#, Aplikace, VS        

.NET Challenge 2010 – Registrujte se!

Na adrese http://soutez.vbnet.cz/Register.aspx jsme otevřeli registrace. Zaregistrujte se co nejdříve! Pokud nějakou úlohu následně zpracujete odešlete ji formulářem, který se objeví na konci měsíce. Registrace nezavazuje k odeslání řešení.

Dále na adrese http://soutez.vbnet.cz/NetBombingEngine.zip (469 332 bytů) naleznete novou verzi herního enginu NetBombing pro zpracování jedné z úloh.

Nové funkce:

  • zrušeno omezení aplikační domény (je tedy možné technologicky využívat další knihovny) - můžete tedy používat teoreticky i F#
  • opraveno pár drobností - nic z toho však neovlivní nebo nepoškodí funkčnost již vámi napsaného kódu
  • NetBombing.Engine.dll je podepsaná (opět to neovlivňuje nijak kód nebo použití knihovny)

[Zobrazit článek]

Datum: 19. 10. 2009 14:27
Diskuse: 0
Hodnocení: Hodnocení: 5/5Hodnocení: 5/5Hodnocení: 5/5Hodnocení: 5/5Hodnocení: 5/5     Zobrazeno: 392x

       

 Strana 1 z 18 (článků: 88) 123456Další »»» 
 

VBNET.CZ | © 2007 Tomáš Herceg, Tomáš Jecha | Kopírování a přejímání jakéhokoliv obsahu z tohoto webu je bez písemného svolení autorů zakázáno.