a-seal
Version:
Access Control Library (ACL)
58 lines (57 loc) • 1.45 kB
TypeScript
import { Request, Response, NextFunction } from 'express';
export declare const ANY = "*";
export declare const ANON_USER: {
role: string;
};
type Rule = {
resource: RegExp;
actions: string[];
roles: string[];
scope?: string;
};
export type MiddlewareOpts = {
anon?: string;
};
export interface AuthenticatedRequest extends Request {
user?: {
role: string;
} | null;
scope?: string;
}
export declare class Acl {
private _rules;
private findRule;
get rules(): Rule[];
/**
* Add a new rule, starting with the resource + action to match
* @param resource
* @returns {{onlyAllow: onlyAllow}}
*/
match(resource: RegExp): {
for: (actions: string[]) => {
allow: (roles: string[]) => {
as: (scope: string) => Rule;
};
};
};
/**
* Loops through the acls in order added looking for a resource pattern match.
* Grants permission if the role is found
* @param role
* @param resource
* @param action
* @returns {boolean}
*/
isAllowed(role: string, resource: string, action: string): boolean;
/**
* Express middleware
* @param {*} opts
*/
middleware(opts: MiddlewareOpts): (req: AuthenticatedRequest, res: Response, next: NextFunction) => void;
/**
* Clear all rules
*/
reset(): void;
}
declare const acl: Acl;
export default acl;