Elysia Tools
Navigation mobile
Elysia Tools
Navigation mobile
Authentication & Authorization
Bibliothèque de contrôle d'accès open source puissante et efficace
Exemples
Contrôle d'accès basé sur les rôles
Difficulté
3/10
Temps estimé
10 min
Étiquettes
casbin, rbac, authorization, security
Prérequis
Node.js, Basic authorization concepts
// Casbin RBAC Setup
const { newEnforcer, newModelFromString, StringAdapter } = require('casbin');
const model = `
[request_definition]
r = sub, obj, act
[policy_definition]
p = sub, obj, act
[role_definition]
g = _, _
[policy_effect]
e = some(where (p.eft == allow))
[matchers]
m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act
`;
const policy = `
p, admin, data1, read
p, bob, data2, write
g, alice, admin
`;
// Check permission
async function checkPermission(enforcer, user, resource, action) {
const allowed = await enforcer.enforce(user, resource, action);
console.log(`${user} can ${action} ${resource}: ${allowed}`);
return allowed;
}
async function main() {
const modelConf = newModelFromString(model);
const policyAdapter = new StringAdapter(policy);
const enforcer = await newEnforcer(modelConf, policyAdapter);
await checkPermission(enforcer, 'alice', 'data1', 'read'); // true
await checkPermission(enforcer, 'bob', 'data2', 'write'); // true
}
main().catch(console.error);Middleware d'autorisation pour Express.js
Difficulté
5/10
Temps estimé
15 min
Étiquettes
casbin, express, middleware, api
Prérequis
Node.js, Express.js, Casbin basics
// Casbin Express Middleware
const express = require('express');
const { newEnforcer } = require('casbin');
async function createAuthMiddleware(modelPath, policyPath) {
const enforcer = await newEnforcer(modelPath, policyPath);
return async (req, res, next) => {
const user = req.user?.id || 'anonymous';
const resource = req.path;
const action = req.method.toLowerCase();
const allowed = await enforcer.enforce(user, resource, action);
if (!allowed) {
return res.status(403).json({ error: 'Access denied' });
}
next();
};
}
// Usage
const app = express();
// Initialize middleware
async function initApp() {
const authMiddleware = await createAuthMiddleware(
'path/to/model.conf',
'path/to/policy.csv'
);
// Apply to routes
app.get('/admin', authMiddleware, (req, res) => {
res.json({ message: 'Admin area' });
});
app.post('/users', authMiddleware, (req, res) => {
res.json({ message: 'User created' });
});
}
initApp();Contrôle d'accès basé sur les attributs
Difficulté
7/10
Temps estimé
20 min
Étiquettes
casbin, abac, attributes, advanced
Prérequis
Casbin basics, ABAC concepts
// Casbin ABAC with Attributes
const model = `
[request_definition]
r = sub, obj, act
[policy_definition]
p = sub_rule, obj, act
[role_definition]
g = _, _
[policy_effect]
e = some(where (p.eft == allow))
[matchers]
m = eval(p.sub_rule) && r.obj == p.obj && r.act == p.act
`;
// Policy with attribute rules
const policies = [
['r.obj.Owner == r.sub', 'document', 'write'],
['r.sub.Role == "admin"', 'document', 'delete'],
['r.obj.Department == r.sub.Department', 'report', 'read']
];
// Context function for ABAC
function createContext(user, resource) {
return {
sub: {
...user,
Role: user.role,
Department: user.department
},
obj: {
...resource,
Owner: resource.owner,
Department: resource.department
}
};
}
// Check with attributes
async function checkABAC(enforcer, user, resource, action) {
const ctx = createContext(user, resource);
const allowed = await enforcer.enforce(
ctx.sub,
ctx.obj,
action
);
return allowed;
}
const user = { id: 'alice', role: 'manager', department: 'finance' };
const doc = { id: 'doc1', owner: 'alice', department: 'finance' };
checkABAC(enforcer, user, doc, 'write'); // trueStockage persistant des politiques
Difficulté
6/10
Temps estimé
15 min
Étiquettes
casbin, database, persistence, mongodb
Prérequis
Node.js, Database basics, Casbin
// Casbin Database Adapter
const express = require('express');
const { newEnforcer } = require('casbin');
const { MongooseAdapter } = require('casbin-mongoose-adapter');
const app = express();
app.use(express.json());
async function setupCasbinWithDB() {
// Initialize database adapter
const adapter = await MongooseAdapter.newAdapter('mongodb://localhost:27017/casbin');
// Create enforcer with database adapter
const enforcer = await newEnforcer(
'path/to/model.conf',
adapter
);
// Add policies to database
await enforcer.addPolicy('alice', 'data1', 'read');
await enforcer.addPolicy('bob', 'data2', 'write');
// Add roles
await enforcer.addRoleForUser('charlie', 'admin');
// Check permission
const allowed = await enforcer.enforce('alice', 'data1', 'read');
// Get all policies
const policies = await enforcer.getPolicy();
console.log('All policies:', policies);
// Remove policy
await enforcer.removePolicy('alice', 'data1', 'read');
return enforcer;
}
// Usage example
async function initAuthSystem() {
const enforcer = await setupCasbinWithDB();
// Dynamic policy management
app.post('/policies', async (req, res) => {
const { sub, obj, act } = req.body;
await enforcer.addPolicy(sub, obj, act);
res.json({ message: 'Policy added' });
});
}
initAuthSystem();Outils
Associé
Guide d'utilisation de l'outil
Titre
Bibliothèque de Contrôle d'Accès Casbin
Description
Bibliothèque de contrôle d'accès open source puissante et efficace
Bibliothèque de contrôle d'accès open source puissante et efficace
This page includes curated sample entries, related tools, and neighboring sample collections for Bibliothèque de Contrôle d'Accès Casbin.
Calculateurs, outils numériques, logique de dates, statistiques et finance