Pflichtenhefte: eigenes Recht einführen
authorMoritz Bunkus <m.bunkus@linet-services.de>
Mon, 20 Jan 2014 15:27:41 +0000 (16:27 +0100)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Tue, 1 Apr 2014 11:12:27 +0000 (13:12 +0200)
SL/Auth.pm
SL/Controller/RequirementSpec.pm
SL/Controller/RequirementSpecItem.pm
SL/Controller/RequirementSpecOrder.pm
SL/Controller/RequirementSpecTextBlock.pm
SL/Controller/RequirementSpecVersion.pm
locale/de/all
menus/erp.ini
sql/Pg-upgrade2-auth/requirement_spec_rights.pl [new file with mode: 0644]

index 13044e7..5a8ee22 100644 (file)
@@ -1059,6 +1059,7 @@ sub all_rights_full {
     ["part_service_assembly_details",  $locale->text("Show details and reports of parts, services, assemblies")],
     ["project_edit",                   $locale->text("Create and edit projects")],
     ["--ar",                           $locale->text("AR")],
+    ["requirement_spec_edit",          $locale->text("Create and edit requirement specs")],
     ["sales_quotation_edit",           $locale->text("Create and edit sales quotations")],
     ["sales_order_edit",               $locale->text("Create and edit sales orders")],
     ["sales_delivery_order_edit",      $locale->text("Create and edit sales delivery orders")],
@@ -1479,7 +1480,7 @@ Returns C<$self>.
 Nothing here yet.
 
 =head1 AUTHOR
-
+pp
 Moritz Bunkus E<lt>m.bunkus@linet-services.deE<gt>
 
 =cut
index 2a04cf7..2f31f97 100644 (file)
@@ -289,7 +289,7 @@ sub action_paste_template {
 sub setup {
   my ($self) = @_;
 
-  $::auth->assert('sales_quotation_edit');
+  $::auth->assert('requirement_spec_edit');
   $::request->{layout}->use_stylesheet("${_}.css") for qw(jquery.contextMenu requirement_spec);
   $::request->{layout}->use_javascript("${_}.js")  for qw(jquery.jstree jquery/jquery.contextMenu jquery/jquery.hotkeys requirement_spec ckeditor/ckeditor ckeditor/adapters/jquery);
   $self->init_visible_section;
index 9b8f643..44a2602 100644 (file)
@@ -496,7 +496,7 @@ sub action_ajax_paste {
 
 sub check_auth {
   my ($self) = @_;
-  $::auth->assert('sales_quotation_edit');
+  $::auth->assert('requirement_spec_edit');
 }
 
 sub load_requirement_spec_item {
index 2bfb1cf..a3b6889 100644 (file)
@@ -54,6 +54,10 @@ sub action_new {
 sub action_create {
   my ($self)         = @_;
 
+  if (!$::auth->assert($::form->{quotation} ? 'sales_quotation_edit' : 'sales_order_edit', 1)) {
+    return $self->js->flash('error', t8("You do not have the permissions to access this function."))->render($self);
+  }
+
   # 1. Update sections with selected part IDs.
   my $section_attrs  = $::form->{sections} || [];
   my $sections       = SL::DB::Manager::RequirementSpecItem->get_all(where => [ id => [ map { $_->{id} } @{ $section_attrs } ] ]);
@@ -93,6 +97,10 @@ sub action_update {
   my $order    = $self->rs_order->order;
   my $sections = $self->requirement_spec->sections_sorted;
 
+  if (!$::auth->assert($order->quotation ? 'sales_quotation_edit' : 'sales_order_edit', 1)) {
+    return $self->js->flash('error', t8("You do not have the permissions to access this function."))->render($self);
+  }
+
   my (@orderitems, %sections_seen);
   foreach my $item (@{ $order->items_sorted }) {
     my $section = first { my $num = $_->fb_number; $item->description =~ m{\b\Q${num}\E\b} && !$sections_seen{ $_->id } } @{ $sections };
@@ -204,7 +212,7 @@ sub action_delete {
 sub setup {
   my ($self) = @_;
 
-  $::auth->assert('sales_quotation_edit');
+  $::auth->assert('requirement_spec_edit');
   $::request->{layout}->use_stylesheet("${_}.css") for qw(jquery.contextMenu requirement_spec autocomplete_part);
   $::request->{layout}->use_javascript("${_}.js")  for qw(jquery.jstree jquery/jquery.contextMenu client_js requirement_spec);
 
index 737f748..86f09c2 100644 (file)
@@ -26,6 +26,7 @@ use Rose::Object::MakeMethods::Generic
   'scalar --get_set_init' => [ qw(predefined_texts js picture) ],
 );
 
+__PACKAGE__->run_before('check_auth');
 __PACKAGE__->run_before('load_requirement_spec_text_block', only => [qw(ajax_edit ajax_update ajax_delete ajax_flag dragged_and_dropped ajax_copy ajax_add_picture)]);
 
 #
@@ -398,6 +399,11 @@ sub action_reorder_pictures {
 # filters
 #
 
+sub check_auth {
+  my ($self) = @_;
+  $::auth->assert('requirement_spec_edit');
+}
+
 sub load_requirement_spec_text_block {
   my ($self) = @_;
   $self->text_block(SL::DB::RequirementSpecTextBlock->new(id => $::form->{id})->load || die "No such requirement spec text block");
index e1d737d..eab34d6 100644 (file)
@@ -95,7 +95,7 @@ sub action_create {
 
 sub check_auth {
   my ($self, %params) = @_;
-  $::auth->assert('sales_quotation_edit');
+  $::auth->assert('requirement_spec_edit');
 }
 
 #
index 7562477..ee87ccd 100755 (executable)
@@ -580,6 +580,7 @@ $self->{texts} = {
   'Create and edit projects'    => 'Projekte erfassen und bearbeiten',
   'Create and edit purchase delivery orders' => 'Lieferscheine von Lieferanten erfassen und bearbeiten',
   'Create and edit purchase orders' => 'Lieferantenauftr&auml;ge erfassen und bearbeiten',
+  'Create and edit requirement specs' => 'Pflichtenhefte erstellen und bearbeiten',
   'Create and edit sales delivery orders' => 'Lieferscheine f&uuml;r Kunden erfassen und bearbeiten',
   'Create and edit sales orders' => 'Auftragsbest&auml;tigungen erfassen und bearbeiten',
   'Create and edit sales quotations' => 'Angebote erfassen und bearbeiten',
@@ -2807,7 +2808,7 @@ $self->{texts} = {
   'You cannot create an invoice for delivery orders for different customers.' => 'Sie können keine Rechnung zu Lieferscheinen für verschiedene Kunden erstellen.',
   'You cannot create an invoice for delivery orders from different vendors.' => 'Sie können keine Rechnung aus Lieferscheinen von verschiedenen Lieferanten erstellen.',
   'You cannot paste function blocks or sub function blocks if there is no section.' => 'Sie können keine Funktionsblöcke oder Unterfunktionsblöcke einfügen, wenn es noch keinen Abschnitt gibt.',
-  'You do not have the permissions to access this function.' => 'Sie verf&uuml;gen nicht &uuml;ber die notwendigen Rechte, um auf diese Funktion zuzugreifen.',
+  'You do not have the permissions to access this function.' => 'Sie verfügen nicht über die notwendigen Rechte, um auf diese Funktion zuzugreifen.',
   'You have entered or selected the following shipping address for this customer:' => 'Sie haben die folgende Lieferadresse eingegeben oder ausgew&auml;hlt:',
   'You have never worked with currencies.' => 'Sie haben noch nie  mit Währungen gearbeitet.',
   'You have not added bank accounts yet.' => 'Sie haben noch keine Bankkonten angelegt.',
index b700dd6..dd43bdf 100644 (file)
@@ -36,7 +36,7 @@ module=controller.pl
 action=Project/new
 
 [Master Data--Add Requirement Spec Template]
-ACCESS=project_edit
+ACCESS=requirement_spec_edit
 module=controller.pl
 action=RequirementSpec/new
 is_template=1
@@ -96,6 +96,7 @@ filter.active=active
 filter.valid=valid
 
 [Master Data--Reports--Requirement Spec Templates]
+ACCESS=requirement_spec_edit
 module=controller.pl
 action=RequirementSpec/list
 is_template=1
@@ -103,6 +104,7 @@ is_template=1
 [AR]
 
 [AR--Add Requirement Spec]
+ACCESS=requirement_spec_edit
 module=controller.pl
 action=RequirementSpec/new
 
@@ -147,6 +149,7 @@ action=acc_menu
 submenu=1
 
 [AR--Reports--Requirement Specs]
+ACCESS=requirement_spec_edit
 module=controller.pl
 action=RequirementSpec/list
 
diff --git a/sql/Pg-upgrade2-auth/requirement_spec_rights.pl b/sql/Pg-upgrade2-auth/requirement_spec_rights.pl
new file mode 100644 (file)
index 0000000..76a9215
--- /dev/null
@@ -0,0 +1,26 @@
+# @tag: requirement_spec_rights
+# @description: Neues Gruppenrecht für Pflichtenhefte
+# @depends: release_3_0_0
+package SL::DBUpgrade2::requirement_spec_rights;
+
+use strict;
+use utf8;
+
+use parent qw(SL::DBUpgrade2::Base);
+
+use SL::DBUtils;
+
+sub run {
+  my ($self) = @_;
+
+  my $groups = $::auth->read_groups;
+
+  foreach my $group (values %{$groups}) {
+    $group->{rights}->{requirement_spec_edit} = $group->{rights}->{sales_quotation_edit} ? 1 : 0;
+    $::auth->save_group($group);
+  }
+
+  return 1;
+}
+
+1;