Decide
A tiny and fast permission engine for Rust.
Define roles and permissions with simple logic like user_id == resource_owner. Done.
Features
- 🦀 Written in pure Rust (zero dependencies for the core logic)
- 💡 Declarative permission checks using embedded expressions (via Rhai)
- 🧱 Define your roles + permissions in JSON
- 📦 Also powers a JS/TS SDK via NAPI — cross-platform ready
Table of Contents
- Installation
- Quickstart
- File-Based Config (Optional, but Recommended)
- Expressions
- Error Handling
- Structs
Installation
Add to your Cargo.toml:
[]
= "0.1.1"
Quickstart
use ;
use Decide;
File-Based Config (Optional, but Recommended)
let decide = from_file.unwrap;
// or use default "decide.config.json" from root:
let decide = default.unwrap;
Expressions
Conditions are written in a simple expression format using Rhai, a safe and embeddable scripting language.
Available fields:
user_id=>user.iduser_roles=>user.rolesresource_owner=>resource.owner_idresource_name=>resource.resource_nameresource_type=>resource.resource_type
You can write things like:
condition: 'user_id == resource_owner'
condition: 'user_roles.contains("admin")'
condition: 'user_roles.contains("moderator") || user_id == resource_owner'
Error Handling
Decide::can() returns a Result<bool, DecideError>. So you can check and handle errors as follows:
match decide.can
Structs
pub type RoleMap = ;
License
MIT