use_perm column for config.z3950_source
authorJason Etheridge <jason@esilibrary.com>
Fri, 22 Jul 2011 05:47:15 +0000 (01:47 -0400)
committerJason Etheridge <jason@esilibrary.com>
Mon, 22 Aug 2011 21:30:00 +0000 (17:30 -0400)
The idea is that if a permission code is specified for a given source, then
staff will need that permission to use that source in the staff client z39.50
interface.

Signed-off-by: Jason Etheridge <jason@esilibrary.com>
Signed-off-by: Bill Erickson <berick@esilibrary.com>
Open-ILS/examples/fm_IDL.xml
Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Z3950.pm
Open-ILS/src/sql/Pg/002.schema.config.sql
Open-ILS/src/sql/Pg/800.fkeys.sql
Open-ILS/src/sql/Pg/upgrade/XXXX.schema.czs_use_perm_column.sql [new file with mode: 0644]

index 7b621a9..3604637 100644 (file)
@@ -819,9 +819,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
             <field reporter:label="Transmission Format" name="transmission_format"  reporter:datatype="text"/>
             <field reporter:label="Auth" name="auth"  reporter:datatype="bool"/>
             <field reporter:label="Attrs" name="attrs" oils_persist:virtual="true"  reporter:datatype="link"/>
+            <field reporter:label="Use Permission" name="use_perm"  reporter:datatype="link"/>
         </fields>
         <links>
             <link field="attrs" reltype="has_many" key="source" map="" class="cza"/>
+            <link field="use_perm" reltype="has_a" key="id" map="" class="ppl"/>
         </links>
         <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
             <actions>
index a5cd5ca..6a09529 100644 (file)
@@ -73,6 +73,7 @@ __PACKAGE__->register_method(
     method    => "query_services",
     api_name  => "open-ils.search.z3950.retrieve_services",
     signature => q/
+        @param auth The login session key
         Returns a list of service names that we have config
         data for
     /
@@ -89,7 +90,7 @@ sub query_services {
     return $e->event unless $e->checkauth;
     return $e->event unless $e->allowed('REMOTE_Z3950_QUERY');
 
-    return fetch_service_defs();
+    return fetch_service_defs($e);
 }
 
 # -------------------------------------------------------------------
@@ -97,10 +98,12 @@ sub query_services {
 # -------------------------------------------------------------------
 sub fetch_service_defs {
 
+    my $editor_with_authtoken = shift;
+
     my $hash = $sclient->config_value('z3950', 'services');
 
     # overlay config file values with in-db values
-    my $e = new_editor();
+    my $e = $editor_with_authtoken || new_editor();
     if($e->can('search_config_z3950_source')) {
 
         my $sources = $e->search_config_z3950_source(
@@ -118,6 +121,8 @@ sub fetch_service_defs {
                 record_format => $s->record_format,
                 transmission_format => $s->transmission_format,
                 auth => $s->auth,
+                use_perm => ($s->use_perm) ? 
+                    $e->retrieve_permission_perm_list($s->use_perm)->code : ''
             };
 
             for my $a ( @{ $s->attrs } ) {
@@ -151,6 +156,19 @@ sub fetch_service_defs {
         }
     };
 
+    # then filter out any services which the requestor lacks the perm for
+    foreach my $s (keys %{ $hash }) {
+        if ($$hash{$s}{use_perm}) {
+            if ($U->check_perms(
+                $e->requestor->id,
+                $e->requestor->ws_ou,
+                $$hash{$s}{use_perm}
+            )) {
+                delete $$hash{$s};
+            }
+        };
+    }
+
     %services = %$hash; # cache these internally so we can actually use the db-configured sources
     return $hash;
 }
index a08f61b..1e14f28 100644 (file)
@@ -440,7 +440,8 @@ CREATE TABLE config.z3950_source (
     db                  TEXT    NOT NULL,
     record_format       TEXT    NOT NULL DEFAULT 'FI',
     transmission_format TEXT    NOT NULL DEFAULT 'usmarc',
-    auth                BOOL    NOT NULL DEFAULT TRUE
+    auth                BOOL    NOT NULL DEFAULT TRUE,
+    use_perm            INT     -- REFERENCES permission.perm_list (id)
 );
 
 COMMENT ON TABLE config.z3950_source IS $$
@@ -457,6 +458,10 @@ COMMENT ON COLUMN config.z3950_source.transmission_format IS $$
 Z39.50 preferred record syntax..
 $$;
 
+COMMENT ON COLUMN config.z3950_source.use_perm IS $$
+If set, this permission is required for the source to be listed in the staff
+client Z39.50 interface.  Similar to permission.grp_tree.application_perm.
+$$;
 
 CREATE TABLE config.z3950_attr (
     id          SERIAL  PRIMARY KEY,
index 4395c64..3777df3 100644 (file)
@@ -122,4 +122,6 @@ ALTER TABLE config.barcode_completion ADD CONSTRAINT config_barcode_completion_o
 CREATE INDEX by_heading_and_thesaurus ON authority.record_entry (authority.normalize_heading(marc)) WHERE deleted IS FALSE or deleted = FALSE;
 CREATE INDEX by_heading ON authority.record_entry (authority.simple_normalize_heading(marc)) WHERE deleted IS FALSE or deleted = FALSE;
 
+ALTER TABLE config.z3950_source ADD CONSTRAINT use_perm_fkey FOREIGN KEY (use_perm) REFERENCES permission.perm_list (id) ON UPDATE CASCADE ON DELETE RESTRICT DEFERRABLE INITIALLY DEFERRED;
+
 COMMIT;
diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.czs_use_perm_column.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.czs_use_perm_column.sql
new file mode 100644 (file)
index 0000000..db1f077
--- /dev/null
@@ -0,0 +1,21 @@
+-- Evergreen DB patch XXXX.schema.czs_use_perm_column.sql
+--
+-- This adds a column to config.z3950_source called use_perm.
+-- The idea is that if a permission is set for a given source,
+-- then staff will need the referenced permission to use that
+-- source.
+--
+BEGIN;
+
+-- check whether patch can be applied
+SELECT evergreen.upgrade_deps_block_check('XXXX', :eg_version);
+
+ALTER TABLE config.z3950_source 
+    ADD COLUMN use_perm INT REFERENCES permission.perm_list (id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
+
+COMMENT ON COLUMN config.z3950_source.use_perm IS $$
+If set, this permission is required for the source to be listed in the staff
+client Z39.50 interface.  Similar to permission.grp_tree.application_perm.
+$$;
+
+COMMIT;