Volltext-Suche: changelog
[kivitendo-erp.git] / SL / DB / AuthGroup.pm
index fe755c7..0331786 100644 (file)
@@ -1,17 +1,10 @@
-# This file has been auto-generated only because it didn't exist.
-# Feel free to modify it at will; it will not be overwritten automatically.
-
 package SL::DB::AuthGroup;
 
 use strict;
 
 use SL::DB::MetaSetup::AuthGroup;
-use SL::DB::AuthGroupRight;
-
-# Creates get_all, get_all_count, get_all_iterator, delete_all and update_all.
-__PACKAGE__->meta->make_manager_class;
-
-__PACKAGE__->meta->schema('auth');
+use SL::DB::Manager::AuthGroup;
+use SL::DB::Helper::Util;
 
 __PACKAGE__->meta->add_relationship(
   users => {
@@ -25,13 +18,100 @@ __PACKAGE__->meta->add_relationship(
     class      => 'SL::DB::AuthGroupRight',
     column_map => { id => 'group_id' },
   },
+  clients => {
+    type      => 'many to many',
+    map_class => 'SL::DB::AuthClientGroup',
+    map_from  => 'group',
+    map_to    => 'client',
+  },
 );
 
 __PACKAGE__->meta->initialize;
 
+sub validate {
+  my ($self) = @_;
+
+  my @errors;
+  push @errors, $::locale->text('The name is missing.')    if !$self->name;
+  push @errors, $::locale->text('The name is not unique.') if !SL::DB::Helper::Util::is_unique($self, 'name');
+
+  return @errors;
+}
+
 sub get_employees {
   my @logins = map { $_->login } $_[0]->users;
   return @logins ? @{ SL::DB::Manager::Employee->get_all(query => [ login => \@logins ]) } : ();
 }
 
+sub rights_map {
+  my $self = shift;
+
+  if (@_) {
+    my %new_rights = ref($_[0]) eq 'HASH' ? %{ $_[0] } : @_;
+    $self->rights([ map { SL::DB::AuthGroupRight->new(right => $_, granted => $new_rights{$_} ? 1 : 0) } $::auth->all_rights ]);
+  }
+
+  return {
+    map({ ($_        => 0)           } $::auth->all_rights),
+    map({ ($_->right => $_->granted) } @{ $self->rights || [] })
+  };
+}
+
 1;
+__END__
+
+=pod
+
+=encoding utf8
+
+=head1 NAME
+
+SL::DB::AuthGroup - RDBO model for auth.group
+
+=head1 SYNOPSIS
+
+  # Outputting all rights granted to this group:
+  my $group  = SL::DB::Manager::AuthGroup->get_first;
+  my %rights = %{ $group->rights_map };
+  print "Granted rights:\n";
+  print "  $_\n" for sort grep { $rights{$_} } keys %rights;
+
+  # Set a right to 'yes':
+  $group->rights_map(%{ $group->rights_map }, invoice_edit => 1);
+  $group->save;
+
+=head1 FUNCTIONS
+
+=over 4
+
+=item C<get_employees>
+
+Returns all employees (as instances of L<SL::DB::Employee>) whose
+corresponding logins are members in this group.
+
+=item C<rights_map [$new_rights]>
+
+Gets/sets the rights for this group as hashes. Returns a hash
+references containing the right names as the keys and trueish/falsish
+values for 'granted'/'not granted'.
+
+If C<$new_rights> is given as a hash reference or a plain hash then it
+will also set all rights from this hash.
+
+=item C<validate>
+
+Validates the object before saving (checks uniqueness, attribute
+presence etc). Returns a list of human-readable errors and an empty
+list on success.
+
+=back
+
+=head1 BUGS
+
+Nothing here yet.
+
+=head1 AUTHOR
+
+Moritz Bunkus E<lt>m.bunkus@linet-services.deE<gt>
+
+=cut