Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Provera dozvole za akciju kontrolera u Razor-u (asp.net mvc3)

[es] :: .NET :: ASP.NET :: Provera dozvole za akciju kontrolera u Razor-u (asp.net mvc3)

[ Pregleda: 1985 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Shadowed
Vojvodina

Član broj: 649
Poruke: 12846



+4783 Profil

icon Provera dozvole za akciju kontrolera u Razor-u (asp.net mvc3)27.12.2011. u 23:13 - pre 149 meseci
Dakle, ako imam u kontroleru:
Code (csharp):

[Authorize(Roles="Manager")]
public ActionResult Delete()
{
    ...
}
 


Ja mogu u Razoru da proverim da li je trenutni korisnik u grupi Manager ali bih vise voleo da proverim da li trutni korisnik ima pravo da koristi Delete i ako ima onda da mu renderujem link za delete. Tako posle menjam samo atribut, ne moram da jurim po view-ovima. Postoji li neka mogucnost za to?
Mozda je resenje trivijalno, al' tek sam pre neki dan poceo da ucim MVC :)
 
Odgovor na temu

Dejan Carić
Oslo, Norway

Član broj: 230976
Poruke: 232
*.dynamic.isp.telekom.rs.

Sajt: www.dcaric.com


+26 Profil

icon Re: Provera dozvole za akciju kontrolera u Razor-u (asp.net mvc3)28.12.2011. u 08:43 - pre 149 meseci
Zaštićene akcije na kontroleru bi uvek trebao da dekorišeš sa Authorize atributom, čak i ako nemaš link ka toj akciji na view-u, jer korisnik može da ukuca šta god hoće u URL i onda nastaje haos. Redosled izvršavanja je takav da se uvek prvo izvrši Action Filter pa tek onda kod koji se nalazi u kontroleru.
Ukoliko su sve akcije na kontroleru zaštićene, onda možeš da dekorišeš samo kontroler sa nekim atributom umesto da dekorišeš svaku akciju posebno.

U kontroleru ispitaj da li je korisnik autorizovan i tu vrednost prosledi na View:
Code:
public ActionResult Index()
{
    var viewModel = new HomeViewModel();
    ...
    viewModel.IsAuthorized = ...

    return View(viewModel);
}

[Authorize(Roles="Manager")]
public ActionResult Delete(int id)
{
    ...
}

i na View samo ispitaš taj uslov:
Code:
@if(Model.IsAuthorized)
{
    <a href="@Url.Action("Delete", "Home", new { id = ... } )">Delete</a>
}

Ukoliko ti je smor da na svakom View-u proveravaš taj uslov i generišeš link, možeš da napraviš custom HTML helper i time uštediš malo vremena.
http://weblogs.asp.net/scottgu...elper-syntax-within-razor.aspx


Generalno sva biznis logika (da li je korisnik autorizovan da uradi nešto itd.) se nikada ne piše u View jer možeš vrlo lako da se pogubiš šta ide u kontroler, šta ide u View, a šta ide u neke druge slojeve tvoje aplikacije...

Ja to radim ovako:
- Repository za data access i on nikada nije referenciran u web projektu
- Service kao proxy i za svu biznis logiku, keširanja, itd. On je referenciran u web projektu i ako ti je potreban pristup Repository-u, to ide preko njega
- Controller poziva Service, domenske modele mapira u ViewModel-e i poziva odgovorajući View
- View iscrtava samo ono što mu je prosleđeno preko ViewModel-a. Ne sadrži nikakvu logiku osim prostih foreach i if petlji

Od alata gotovo uvek koristim AutoMapper, StructureMap i Elmah.

[Ovu poruku je menjao Dejan Carić dana 28.12.2011. u 10:12 GMT+1]
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12846



+4783 Profil

icon Re: Provera dozvole za akciju kontrolera u Razor-u (asp.net mvc3)28.12.2011. u 11:38 - pre 149 meseci
E, hvala na opsirnom odgovoru. Zapravo, ako idem preko ViewModel-a onda bi trebalo nesto kao ViewModel.IsAuthorizedFor("Delete") jer mi treba posebno za tu akciju. Pa onda ViewModel.IsAuthorizedFor("Add") itd. Tako bih nesto i uradio ako ne postoji direktna podrska, samo me zanimalo da li postoji nesto ugradjeno za to, cisto da ne ubacujem podatke o tome u Model (ili ViewModel) ako vec postoje dostupni.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Provera dozvole za akciju kontrolera u Razor-u (asp.net mvc3)28.12.2011. u 11:52 - pre 149 meseci
samo mali predlog, izegavaj magic strings ako ikako mozes. Meni se generalno asp.net mvc ne svija ali mi je ceo taj koncept sa konvencijom preko stringova posebno odbojan i potpuno kontra sa celom "testable" koncepcijom koju MVC prodaje.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12846



+4783 Profil

icon Re: Provera dozvole za akciju kontrolera u Razor-u (asp.net mvc3)28.12.2011. u 11:59 - pre 149 meseci
Slazem se za to, ni ja ne volim koriscenje stringova na taj nacin, nevezano za mvc, al' je ovde dobro posluzilo za jednostavni prikaz.
 
Odgovor na temu

Dejan Carić
Oslo, Norway

Član broj: 230976
Poruke: 232
*.dynamic.isp.telekom.rs.

Sajt: www.dcaric.com


+26 Profil

icon Re: Provera dozvole za akciju kontrolera u Razor-u (asp.net mvc3)28.12.2011. u 11:59 - pre 149 meseci
Nema ništa ugrađeno, moraš sam da napraviš... ali nema potrebe ni da praviš ViewModel.IsAuthorizedFor("Delete")

Jednostavno, napraviš ovakav ViewModel:

Code:
public class FooViewModel
{
    public bool ShowAddLink { get; set; }
    public bool ShowDeleteLink { get; set; }
    ...
}

u kontroleru mu nasetuješ te vrednosti, a na View pozoveš HTML helper koji kao argumente prima bool showLink, string actionName, string controllerName i object routeValues:

Code:
@TvojHelper.ActionLink(Model.ShowAddLink, "Delete", "Foo", new { id = 3 })

I tvoj helper bi trebalo da vrati null ukoliko mu proslediš false ili pravi link ukoliko mu proslediš true.


Obično takve html helpere koristim za img tagove da bih izbegao pisanje if petlji.
Helper prima putanju do slike i alt text kao argumente. Ako je putanja prazna, vraćam string.Empty ili default sliku. Ukoliko je alt text prazan vraćam alt="".

 
Odgovor na temu

[es] :: .NET :: ASP.NET :: Provera dozvole za akciju kontrolera u Razor-u (asp.net mvc3)

[ Pregleda: 1985 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.