<pre><code class="language-typescript"><span class="hl-3">import</span><span class="hl-1"> { </span><span class="hl-4">Login</span><span class="hl-1">, </span><span class="hl-4">Role</span><span class="hl-1">, </span><span class="hl-4">Catalog</span><span class="hl-1"> } </span><span class="hl-3">from</span><span class="hl-1"> </span><span class="hl-2">"@libreworks/db-provision-pgsql"</span><span class="hl-1">;</span><br/><br/><span class="hl-5">const</span><span class="hl-1"> </span><span class="hl-6">username</span><span class="hl-1"> = </span><span class="hl-2">"example_user"</span><span class="hl-1">;</span><br/><span class="hl-5">const</span><span class="hl-1"> </span><span class="hl-6">password</span><span class="hl-1"> = </span><span class="hl-2">"🙈"</span><span class="hl-1">;</span><br/><span class="hl-5">const</span><span class="hl-1"> </span><span class="hl-6">owner</span><span class="hl-1"> = </span><span class="hl-5">new</span><span class="hl-1"> </span><span class="hl-0">Login</span><span class="hl-1">(</span><span class="hl-4">username</span><span class="hl-1">, </span><span class="hl-4">password</span><span class="hl-1">);</span><br/><span class="hl-5">const</span><span class="hl-1"> </span><span class="hl-6">admin</span><span class="hl-1"> = </span><span class="hl-5">new</span><span class="hl-1"> </span><span class="hl-0">Role</span><span class="hl-1">(</span><span class="hl-2">"admin"</span><span class="hl-1">);</span><br/><span class="hl-5">const</span><span class="hl-1"> </span><span class="hl-6">grants</span><span class="hl-1"> = [];</span><br/><span class="hl-4">grants</span><span class="hl-1">.</span><span class="hl-0">push</span><span class="hl-1">(</span><span class="hl-4">admin</span><span class="hl-1">.</span><span class="hl-0">assignTo</span><span class="hl-1">(</span><span class="hl-4">owner</span><span class="hl-1">));</span><br/><span class="hl-5">const</span><span class="hl-1"> </span><span class="hl-6">readers</span><span class="hl-1"> = </span><span class="hl-5">new</span><span class="hl-1"> </span><span class="hl-0">Role</span><span class="hl-1">(</span><span class="hl-2">"readers"</span><span class="hl-1">);</span><br/><span class="hl-5">const</span><span class="hl-1"> </span><span class="hl-6">catalog</span><span class="hl-1"> = </span><span class="hl-5">new</span><span class="hl-1"> </span><span class="hl-0">Catalog</span><span class="hl-1">(</span><span class="hl-2">"my_database"</span><span class="hl-1">);</span><br/><span class="hl-5">const</span><span class="hl-1"> </span><span class="hl-6">schema</span><span class="hl-1"> = </span><span class="hl-4">catalog</span><span class="hl-1">.</span><span class="hl-0">createSchema</span><span class="hl-1">(</span><span class="hl-4">username</span><span class="hl-1">, </span><span class="hl-4">owner</span><span class="hl-1">);</span><br/><span class="hl-4">grants</span><span class="hl-1">.</span><span class="hl-0">push</span><span class="hl-1">(</span><br/><span class="hl-1"> </span><span class="hl-4">catalog</span><span class="hl-1">.</span><span class="hl-0">grant</span><span class="hl-1">(</span><span class="hl-4">owner</span><span class="hl-1">, </span><span class="hl-2">"CONNECT"</span><span class="hl-1">, </span><span class="hl-2">"TEMP"</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-4">catalog</span><span class="hl-1">.</span><span class="hl-0">grant</span><span class="hl-1">(</span><span class="hl-4">readers</span><span class="hl-1">, </span><span class="hl-2">"CONNECT"</span><span class="hl-1">, </span><span class="hl-2">"TEMP"</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-4">schema</span><span class="hl-1">.</span><span class="hl-0">grant</span><span class="hl-1">(</span><span class="hl-4">readers</span><span class="hl-1">, </span><span class="hl-2">"USAGE"</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-4">schema</span><span class="hl-1">.</span><span class="hl-0">allTables</span><span class="hl-1">().</span><span class="hl-0">grant</span><span class="hl-1">(</span><span class="hl-4">readers</span><span class="hl-1">, </span><span class="hl-2">"SELECT"</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-4">schema</span><span class="hl-1">.</span><span class="hl-0">allSequences</span><span class="hl-1">().</span><span class="hl-0">grant</span><span class="hl-1">(</span><span class="hl-4">readers</span><span class="hl-1">, </span><span class="hl-2">"SELECT"</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-4">schema</span><span class="hl-1">.</span><span class="hl-0">setDefaultTablePrivileges</span><span class="hl-1">(</span><span class="hl-4">readers</span><span class="hl-1">, </span><span class="hl-2">"SELECT"</span><span class="hl-1">).</span><span class="hl-0">forCreator</span><span class="hl-1">(</span><span class="hl-4">owner</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-4">schema</span><span class="hl-1">.</span><span class="hl-0">setDefaultSequencePrivileges</span><span class="hl-1">(</span><span class="hl-4">readers</span><span class="hl-1">, </span><span class="hl-2">"SELECT"</span><span class="hl-1">).</span><span class="hl-0">forCreator</span><span class="hl-1">(</span><span class="hl-4">owner</span><span class="hl-1">)</span><br/><span class="hl-1">);</span><br/><br/><span class="hl-7">// Display the SQL</span><br/><span class="hl-5">const</span><span class="hl-1"> </span><span class="hl-6">statements</span><span class="hl-1"> = [</span><br/><span class="hl-1"> </span><span class="hl-4">owner</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-4">admin</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-4">readers</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-4">catalog</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-4">schema</span><span class="hl-1">,</span><br/><span class="hl-1"> ...</span><span class="hl-4">grants</span><span class="hl-1">,</span><br/><span class="hl-1">].</span><span class="hl-0">map</span><span class="hl-1">((</span><span class="hl-4">v</span><span class="hl-1">) </span><span class="hl-5">=></span><span class="hl-1"> </span><span class="hl-4">v</span><span class="hl-1">.</span><span class="hl-0">toSql</span><span class="hl-1">());</span><br/><span class="hl-4">console</span><span class="hl-1">.</span><span class="hl-0">log</span><span class="hl-1">(</span><span class="hl-4">statements</span><span class="hl-1">.</span><span class="hl-0">join</span><span class="hl-1">(</span><span class="hl-2">";</span><span class="hl-8">\n</span><span class="hl-2">"</span><span class="hl-1">) + </span><span class="hl-2">";</span><span class="hl-8">\n</span><span class="hl-2">"</span><span class="hl-1">);</span>
0 commit comments