Schrift
[thread]4519[/thread]

Maypole::Authentication::Abstract

Leser: 1


<< >> 1 Eintrag, 1 Seite
sri
 2004-08-12 12:31
#39922 #39922
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hi,

Hab grad ein neues Modul ins CPAN gestellt, falls ihr Maypole benutzt könnte es recht nützlich für euch sein.
Es macht Zugriffskontrolle und Session Management für eure Web-Anwendungen zum Kinderspiel.

Wir haben dafür drei Sicherheitsstufen:
Code: (dl )
1
2
3
4
    Public: No authentication, only session management
Private: Authenticate once, go everywhere
Restricted: Authenticate and reauthorize with a ticket for every
request (best used in a post form as hidden input)


Hier mal ein Beispiel:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use base qw(Apache::MVC Maypole::Authentication::Abstract);

sub authenticate {
my $r = shift;
if ( $r->{table} eq 'openforall' ) {
$r->public;
}
elsif ( $r->{table} eq 'membersonly' ) {
$r->private;
$r->{template} = 'login' unless $r->{user};
}
elsif ( $r->{table} eq 'topsecret' ) {
$r->restricted;
$r->{template} = 'login' unless $r->{user};
}
}


Wie ihr seht braucht ihr nur eine von drei Methoden aufrufen und den Rest (cookie handling, user authentifizieren, sessions etc...) erledigt das Modul für euch.
Konfigurierbar ist das ganze natürlich auch.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
use base qw(Apache::MVC Maypole::Authentication::Abstract);

MyApp->config->{auth} = {
user_class => 'MyApp::Customer',
user_field => 'email',
session_class => 'Apache::Session::Postgres',
session_args => {
DataSource => 'dbi:Pg:dbname=myapp',
UserName => 'postgres',
Password => '',
Commit => 1
}
};

sub authenticate {
my $r = shift;
if ( $r->{table} eq 'products' && $r->{action} eq 'list' ) {
$r->public;
}
elsif ( $r->{table} eq 'products' && $r->{action} eq 'search' ) {
$r->private;
$r->{template} = 'login' unless $r->{user};
}
elsif ( $r->{table} eq 'products' && $r->{action} eq 'edit' ) {
$r->restricted;
$r->{template} = 'login' unless $r->{user};
}
}


Erweitern lässt es sich durch einfaches überladen von Methoden, so sind dann auch Sachen wie die Nutzung von Kerberos als Ticketsystem machbar!

P.S.: Im CPAN ist es noch nicht zu finden denn pause scheint heute probleme zu haben. :(
<< >> 1 Eintrag, 1 Seite



View all threads created 2004-08-12 12:31.