@superawesome/permissions
Version:
Fine grained permissions / access control with ownerships & attribute picking, done right.
179 lines (146 loc) • 8.39 kB
HTML
<html class="no-js" lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<title>SuperAwesome Permissions (@superawesome/permissions)</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="./images/favicon.ico">
<link rel="stylesheet" href="./styles/style.css">
<link rel="stylesheet" href="./styles/postmark.css">
</head>
<body>
<div class="navbar navbar-default navbar-fixed-top visible-xs">
<a href="./" class="navbar-brand">SuperAwesome Permissions (@superawesome/permissions)</a>
<button type="button" class="btn btn-default btn-menu ion-ios-menu" id="btn-menu"></button>
</div>
<div class="xs-menu menu" id="mobile-menu">
<div id="book-search-input" role="search"><input type="text" placeholder="Type to search"></div> <compodoc-menu></compodoc-menu>
</div>
<div class="container-fluid main">
<div class="row main">
<div class="hidden-xs menu">
<compodoc-menu mode="normal"></compodoc-menu>
</div>
<!-- START CONTENT -->
<div class="content getting-started">
<div class="content-data">
<h1 id="superawesome-permissions">SuperAwesome Permissions</h1>
<ul>
<li><p>NPM package: <code>@superawesome/permissions</code></p>
</li>
<li><p>Github: <code>https://github.com/SuperAwesomeLTD/permissions</code></p>
</li>
</ul>
<h1 id="features">Features</h1>
<p>In lieu of a proper landing page, <strong>SuperAwesome Permissions</strong> features:</p>
<ul>
<li><p><a href="/#">:left_luggage:</a> <strong>Controlled Access</strong> to Resources</p>
</li>
<li><p><a href="/#">:nail_care:</a> <strong>Fine Grained</strong> Resource Attributes picking</p>
</li>
<li><p><a href="/#">:customs:</a> Dynamic <strong>Ownership</strong> Rules, hooked to your data layer</p>
</li>
<li><p><a href="/#">:performing_arts:</a> Trivial conversion of <strong>Business Rules for Access Control</strong> to <strong>executing permissions</strong> (and vise versa).</p>
</li>
<li><p><a href="/#">:atom:</a> Straight-forward fusion of <a href="https://en.wikipedia.org/wiki/Role-based_access_control">Role-Based Access Control</a>, <a href="https://en.wikipedia.org/wiki/Attribute-based_access_control">Attribute-Based Access Control</a> and <strong>Whatever-You-Make-it Access control</strong></p>
</li>
<li><p><a href="/#">:telescope:</a> Unlimited <strong>Scalability</strong> (lazy & eager ownership evaluation)</p>
</li>
<li><p><a href="/#">:wrench:</a> Easy <strong>Integration</strong> with everything (REST, Graphql, SQL, NoSQL, APIs, Frontend, Games, anything)</p>
</li>
<li><p><a href="/#">:shell:</a> <strong>Zero dependencies</strong> with servers, services & other moving parts</p>
</li>
<li><p><a href="/#">:triangular_ruler:</a> Orthogonal / <strong>Aspect Oriented</strong> philosophy</p>
</li>
<li><p><a href="/#">:ticket:</a> <strong>Permit</strong> is all you need to allow a <strong>user</strong> do an <strong>action</strong> on a <strong>resource</strong> </p>
</li>
</ul>
<p><em>(^^ github needed to show icons ^^)</em></p>
<h2 id="contents">Contents</h2>
<p>The actual generated docs are at <code>npm run docs:serve</code> and <strong>coming soon</strong> at <a href="https://permissions.docs.superawesome.com"><strong>SuperAwesome Permissions Documentation</strong></a>. Go to the left, at the CompoDocs Nav Bar.</p>
<p><strong>NOTE: THESE LINKS BREAK ON GITHUB! (^^^ read above ^^^)</strong></p>
<ul>
<li><p><a href="additional-documentation/introduction-&-glossary.html">Introduction & Glossary</a></p>
</li>
<li><p><a href="additional-documentation/basic-usage.html">Basic Usage</a></p>
</li>
<li><p><a href="additional-documentation/detailed-usage-&-examples.html">Detailed Usage & Examples</a></p>
</li>
<li><p><a href="additional-documentation/philosophy,-principles-&-architecture.html">Philosophy, Principles & Architecture</a></p>
</li>
<li><p><a href="/additional-documentation/inspiration,-problem,-prior-art.html">Inspiration, Problem and Prior Art</a>.</p>
</li>
<li><p><a href="additional-documentation/faq,-gotchas-&-caveats.html">FAQ, Gotchas & Caveats</a></p>
</li>
<li><p><a href="additional-documentation/future-roadmap.html">Future Roadmap</a></p>
</li>
</ul>
<p><strong>Note</strong>: We also have <a href="https://github.com/SuperAwesomeLTD/permissions-nestjs">native Nestjs Guard & Decorators</a> empowering an Orthogonal / Aspect Oriented Architecture.</p>
<h1 id="versioning">Versioning</h1>
<p>The project follows <a href="https://semver.org/">semantic versioning</a> which effectively means a new major version x.0.0 is released for breaking changes, minor 0.x.0 for new features and patch 0.0.x for fixes. </p>
<h1 id="how-to-develop">How to develop</h1>
<h2 id="code">Code</h2>
<ul>
<li><p>Simply do an <code>npm run test:watch</code> to develop and test at each change.</p>
</li>
<li><p>With <code>npm run build:ts</code> you get a build of the library at <code>/dist</code>.</p>
</li>
<li><p>With <code>npm run build</code> you get a full build of library & docs at <code>/dist</code>.</p>
</li>
</ul>
<h2 id="documentation">Documentation</h2>
<p>End user docs reside at <code>src/docs</code> & <code>*.md.spec</code> files:</p>
<ul>
<li><p>With <code>npm run docs:build</code> it builds docs at <code>dist/docs</code> once.</p>
</li>
<li><p>With <code>npm run docs:serve</code> it serves docs at <a href="http://127.0.0.1:8090">http://127.0.0.1:8090</a> in non-watch mode.</p>
</li>
<li><p>With <code>npm run docs:watch</code> it serves docs at <a href="http://127.0.0.1:8090">http://127.0.0.1:8090</a> in watch & serve mode.</p>
</li>
</ul>
<h2 id="docs-generation">Docs generation</h2>
<p>All <code>*.md.spec.ts</code> files generate equivalent <code>src/docs/generated/*.generated.md</code></p>
<p><strong>Note</strong>: On watch mode it's sometimes slow to build & serve, especially initially. Just change & save the <code>*.md.spec.ts</code> file to trigger generation & also refresh browser if its not refreshing automatically.</p>
</div><div class="search-results">
<div class="has-results">
<h1 class="search-results-title"><span class='search-results-count'></span> result-matching "<span class='search-query'></span>"</h1>
<ul class="search-results-list"></ul>
</div>
<div class="no-results">
<h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
</div>
</div>
</div>
<!-- END CONTENT -->
</div>
</div>
<script>
var COMPODOC_CURRENT_PAGE_DEPTH = 0;
var COMPODOC_CURRENT_PAGE_CONTEXT = 'getting-started';
var COMPODOC_CURRENT_PAGE_URL = 'future-roadmap.html';
</script>
<script src="./js/libs/custom-elements.min.js"></script>
<script src="./js/libs/lit-html.js"></script>
<!-- Required to polyfill modern browsers as code is ES5 for IE... -->
<script src="./js/libs/custom-elements-es5-adapter.js" charset="utf-8" defer></script>
<script src="./js/menu-wc.js" defer></script>
<script src="./js/libs/bootstrap-native.js"></script>
<script src="./js/libs/es6-shim.min.js"></script>
<script src="./js/libs/EventDispatcher.js"></script>
<script src="./js/libs/promise.min.js"></script>
<script src="./js/libs/zepto.min.js"></script>
<script src="./js/compodoc.js"></script>
<script src="./js/tabs.js"></script>
<script src="./js/menu.js"></script>
<script src="./js/libs/clipboard.min.js"></script>
<script src="./js/libs/prism.js"></script>
<script src="./js/sourceCode.js"></script>
<script src="./js/search/search.js"></script>
<script src="./js/search/lunr.min.js"></script>
<script src="./js/search/search-lunr.js"></script>
<script src="./js/search/search_index.js"></script>
<script src="./js/lazy-load-graphs.js"></script>
</body>
</html>