npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

shiro-expander

v0.1.1

Published

Extends Apache Shiro expression such that permissions can be dynamically expanded.

Downloads

7

Readme

Shiro expander Circle CI

Summarize Apache Shiro statements by expressing them using relations between different entities.

Installation

npm install --save shiro-expander

Syntax

This library allows statements to be summarized into a single statement, the syntax for such a summarized statement is as follows:

file:write:{user:me}

You can then define rules which dictate how this expression is expanded, to expand this statement we create 2 rules.

Expand the relation user -> me into user ids.

expander.createRule('user', 'me', function(rule, ids, cb) {
    // Find the user associated with the current user
    someDatabase.query('a-query', function(err, result) {
        cb(null, result.id);
    })
})

Expand the relation file -> user into file ids.

expander.createRule('file', 'user', function(rule, ids, cb) {
    // Find the files owned by the users in `ids`.

    someDatabase.query('select files where userId in ids', function( err, result) {
        var fileIds = result.map(result, function(f) { return f.id; });
        cb(err, fileIds);
    })
})

Finally expand the rule using the created expander:

expander.expand('file:write:{user:me}', function(err, statements) {
    // Statements will contain a rule for each `fileId` in `fileIds`.
    // Statements is an array with values in the following format `file:write:<fileId>`
})

Rule generation

Some rules will be inferred from the rules already generated.

From the rules below we will be able to infer other rules:

file -> user
user -> organization
organization -> me

The library will automatically generate the following rules:

file -> organization
file -> me
user -> me

These will chain the rules such that there is a path between each relation.

file -> me
equals
file -> user -> organization -> me

Examples

Examples are available in the examples folder of this repository.

Contribution

Feel free to send me a Pull Request / Issue if you think something is broken or can be improved upon.

To run tests locally you simple run npm test

If you are making changes to the library grunt watch will keep your changes in check with coding style and run the unit tests to ensure nothing breaks.