diff options
author | Yorhel <git@yorhel.nl> | 2011-04-30 18:04:50 +0200 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2011-04-30 18:04:50 +0200 |
commit | 4873e8583189ee9c611fadd27d491dc104c52b57 (patch) | |
tree | 8c3b4e8b6f1c011e85f1ead078b7308b0863345e /lib | |
parent | 57b464e826e5f24828dec9401b70baaa43410b6c (diff) |
Replaced user ranks with a permission system
This is far more flexible.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/VNDB/DB/Users.pm | 4 | ||||
-rw-r--r-- | lib/VNDB/Handler/Users.pm | 16 | ||||
-rw-r--r-- | lib/VNDB/Util/Auth.pm | 5 | ||||
-rw-r--r-- | lib/VNDB/Util/LayoutHTML.pm | 1 |
4 files changed, 14 insertions, 12 deletions
diff --git a/lib/VNDB/DB/Users.pm b/lib/VNDB/DB/Users.pm index 17f360cc..abea9bec 100644 --- a/lib/VNDB/DB/Users.pm +++ b/lib/VNDB/DB/Users.pm @@ -55,7 +55,7 @@ sub dbUserGet { qw|id username c_votes c_changes c_tags|, q|extract('epoch' from registered) as registered|, $o{what} =~ /extended/ ? ( - qw|mail rank salt ign_votes|, + qw|mail perm salt ign_votes|, q|encode(passwd, 'hex') AS passwd| ) : (), $o{what} =~ /hide_list/ ? 'up.value AS hide_list' : (), @@ -118,7 +118,7 @@ sub dbUserEdit { my %h; defined $o{$_} && ($h{$_.' = ?'} = $o{$_}) - for (qw| username mail rank salt ign_votes |); + for (qw| username mail perm salt ign_votes |); $h{'passwd = decode(?, \'hex\')'} = $o{passwd} if defined $o{passwd}; diff --git a/lib/VNDB/Handler/Users.pm b/lib/VNDB/Handler/Users.pm index 6cedc734..dc748f75 100644 --- a/lib/VNDB/Handler/Users.pm +++ b/lib/VNDB/Handler/Users.pm @@ -301,7 +301,7 @@ sub edit { $frm = $self->formValidate( $self->authCan('usermod') ? ( { post => 'usrname', template => 'pname', minlength => 2, maxlength => 15 }, - { post => 'rank', enum => [ 1..$#{$self->{user_ranks}} ] }, + { post => 'perms', required => 0, multi => 1, enum => [ keys %{$self->{permissions}} ] }, { post => 'ign_votes', required => 0, default => 0 }, ) : (), { post => 'mail', template => 'mail' }, @@ -318,7 +318,10 @@ sub edit { $self->dbUserPrefSet($uid, $_ => $frm->{$_}) for (qw|skin customcss show_nsfw hide_list |); my %o; $o{username} = $frm->{usrname} if $frm->{usrname}; - $o{rank} = $frm->{rank} if $frm->{rank}; + if($self->authCan('usermod')) { + $o{perm} = 0; + $o{perm} += $self->{permissions}{$_} for(@{ delete $frm->{perms} }); + } $o{mail} = $frm->{mail}; ($o{passwd}, $o{salt}) = $self->authPreparePass($frm->{usrpass}) if $frm->{usrpass}; $o{ign_votes} = $frm->{ign_votes} ? 1 : 0 if $self->authCan('usermod'); @@ -330,8 +333,9 @@ sub edit { } # fill out default values - $frm->{usrname} ||= $u->{username}; - $frm->{$_} ||= $u->{$_} for(qw|rank mail|); + $frm->{usrname} ||= $u->{username}; + $frm->{mail} ||= $u->{mail}; + $frm->{perms} ||= [ grep $u->{perm} & $self->{permissions}{$_}, keys %{$self->{permissions}} ]; $frm->{$_} //= $u->{prefs}{$_} for(qw|skin customcss show_nsfw hide_list|); $frm->{ign_votes} = $u->{ign_votes} if !defined $frm->{ign_votes}; @@ -350,8 +354,8 @@ sub edit { [ part => title => mt '_usere_geninfo' ], $self->authCan('usermod') ? ( [ input => short => 'usrname', name => mt('_usere_username') ], - [ select => short => 'rank', name => mt('_usere_rank'), options => [ - map [ $_, mt '_urank_'.$_ ], 1..$#{$self->{user_ranks}} ] ], + [ select => short => 'perms', name => mt('_usere_perm'), multi => 1, size => (scalar keys %{$self->{permissions}}), options => [ + map [ $_, $_ ], sort keys %{$self->{permissions}} ] ], [ check => short => 'ign_votes', name => mt '_usere_ignvotes' ], ) : ( [ static => label => mt('_usere_username'), content => $frm->{usrname} ], diff --git a/lib/VNDB/Util/Auth.pm b/lib/VNDB/Util/Auth.pm index 88e68edc..89807bef 100644 --- a/lib/VNDB/Util/Auth.pm +++ b/lib/VNDB/Util/Auth.pm @@ -88,8 +88,7 @@ sub authInfo { # a certain action. Argument is the action name as defined in global.pl sub authCan { my($self, $act) = @_; - my $r = $self->{_auth} ? $self->{_auth}{rank} : 0; - return scalar grep $_ eq $act, @{$self->{user_ranks}[$r]}[0..$#{$self->{user_ranks}[$r]}]; + return $self->{_auth} ? $self->{_auth}{perm} & $self->{permissions}{$act} : 0; } @@ -102,7 +101,7 @@ sub _authCheck { return 0 if !$user || length($user) > 15 || length($user) < 2 || !$pass; my $d = $self->dbUserGet(username => $user, what => 'extended notifycount')->[0]; - return 0 if !defined $d->{id} || !$d->{rank}; + return 0 if !$d->{id}; if(_authEncryptPass($self, $pass, $d->{salt}) eq $d->{passwd}) { $self->{_auth} = $d; diff --git a/lib/VNDB/Util/LayoutHTML.pm b/lib/VNDB/Util/LayoutHTML.pm index 5dd8038f..e1e21924 100644 --- a/lib/VNDB/Util/LayoutHTML.pm +++ b/lib/VNDB/Util/LayoutHTML.pm @@ -89,7 +89,6 @@ sub _menu { my $nc = $self->authInfo->{notifycount}; h2; a href => $uid, ucfirst $self->authInfo->{username}; - txt ' ('.mt('_urank_'.$self->authInfo->{rank}).')'; end; div; a href => "$uid/edit", mt '_menu_myprofile'; br; |