Zdravím,
email my omylem "utekl" v půlce, tak zde je jeho kompletní obsah :-)
Nebudu odpovídat přímo k samotnému JSF, ale budu odpovídat na knihovně
Seam. Snad Vám to pomůže.
Pro ověřování identity uživatele obvykle píšeme vlastní kód (tj.
nepoužíváme prostředky kontejneru). Identifikaci uživatele ukládáme do
Session.
Pokud použijete Seam musíte vlastně jen naimplementovat metodu pro
ověření uživatele
@Name("authenticator")
public class Authenticator
{
@In Identity identity;
public boolean authenticate()
{
log.info("authenticating #0", identity.getUsername());
//write your authentication logic here,
//return true if the authentication was
//successful, false otherwise
identity.addRole("admin");
return true;
}
}
> Zbytek jsem udelal tak trochu jak to pises i ty - ad hoc.
> V zasade jsem u komponent rozlisoval parametr rendered=true/false
> podle toho, zda uzivatel ma, ci nema pravo danou komponentu (e.g. tlacitko)
> videt.
Toto je správný a bezpečný způsob. JSF nejdříve vytvoří strukturu
komponent a nad tím teprve provádí akce. Není tedy cesta,
jak zavolat akci nad komponentou, která není vyrenderovaná.
Zbytek je již jen způsobem kam umístit práva - definice práv by měla být
vždy na jednom místě (i když kontrolována může být na několika).
Seam např. definuje anotaci @Restrict a umožňuje kontrolu práv na úrovni
metod:
@Name("account")
public class AccountAction {
@Restrict public void delete() {
...
}
}
V JSF pak mohu napsat rendered="#{s:hasPermission('account','delete',null)}".
Případně použít v kódu
Identity.instance().checkRestriction("#{s:hasPermission('customer','delete',null)}");
Případně je možné definovat práva takto:
@Restrict("#{s:hasRole('admin')}")
public void delete() {
Tímto bychom měli vyřešena práva k "akcím". Pak ještě scházejí práva k
řádkům, instancím objektů (k tomu slouží ten třetí parametr null)
V Seam je také možné použít jazyk Drools pro definici složitějších
práv.
http://docs.jboss.com/seam/1.2.0.PATCH1/reference/en/html/security.html
--
Petr Ferschmann
SoftEU s.r.o.
-----------------------------------
Bolevecká 6
301 00 Plzen
Czech Republic
-----------------------------------
Phone: +420 373 731 284
+420 373 729 300
Fax: +420 373 729 301
Cell: +420 775 638 008
E-mail: [EMAIL PROTECTED]