Comments (4)
Should use single pattern :) Yan can run it and is working.
const appBoot = {
enforcer: null,
newCasbin: async () => {
if(!this.enforcer){
const dbConnect = await TypeORMAdapter.newAdapter({
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "root",
"password": "123456",
"database": "casbin"
});
this.enforcer = await casbin.newEnforcer('authz_model.conf', dbConnect);
}
return this.enforcer
}
}
module.exports = {
middleware: [ 'user', 'authz' ],
authz: {
enable: true,
newEnforcer: async () => {
const e = await appBoot.newCasbin()
return e
}
}
}
from typeorm-adapter.
@Shaun-Li typeorm-adapter v1.0.3 has been published and fixed where this errror.
from typeorm-adapter.
Well, I'm happy to see it's fixed, but I just wonder why this issue is not in: https://github.com/node-casbin/typeorm-adapter ?
from typeorm-adapter.
I am using nestjs and install casbin and typeorm-adapter v1.2.0. I am facing below issue.
Error: AlreadyHasActiveConnectionError: Cannot create a new connection named "node-casbin-official", because connection with such name already exist and it now has an active connection session
Node version: 12.0.0
My code is:
Filename: main.ts
import { authz } from './auth-module/authorization.middleware';
async function bootstrap(): Promise<void> {
app.use(authz(async () => {
const adapter = await TypeORMAdapter.newAdapter(configService.getTypeOrmAdapter());
const e = await newEnforcer('/var/www/html/avantha-audit-pro-api/src/casbin_conf/rbac_model.conf', adapter);
// Load the policy from DB.
await e.loadPolicy();
return e;
}));
}
bootstrap();
Filename:authorization.middleware.ts
import { Enforcer, newEnforcer } from 'casbin';
import TypeORMAdapter from 'typeorm-adapter';
export class BasicAuthorizer {
private req: any;
private enforcer: any;
constructor(req, enforcer) {
this.req = req;
this.enforcer = enforcer;
}
getUserRole() {
const { user } = this.req;
if(typeof user !== 'undefined'){
const { role } = user;
return role;
}
return true;
}
checkPermission() {
const { req, enforcer } = this;
const { originalUrl: path, method } = req;
const userRole = this.getUserRole();
if (userRole){
return enforcer.enforce(userRole, path, method);
}
return true;
}
}
// the authorizer middleware
export function authz(newEnforcer: () => Promise<Enforcer>) {
return async (req, res, next) => {
const enforcer = await newEnforcer();
// user sample
//req.user = { role: 'admin' };
if (!(enforcer instanceof Enforcer)) {
res.status(500).json({ 500: 'Invalid enforcer' });
return;
}
const authorizer = new BasicAuthorizer(req, enforcer);
if (!authorizer.checkPermission()) {
res.status(403).json({ 403: 'Forbidden' });
return;
}
next();
}
};
Please help me to solve this issue.
from typeorm-adapter.
Related Issues (20)
- batch operation support HOT 2
- Error: filtered policies are not supported by this adapter HOT 2
- Any existing function to retrieve filtered policies HOT 5
- [feat] pass connection object to newAdapter HOT 2
- AlreadyHasActiveConnectionError issue in nestjs HOT 2
- casbin_rule does not exist HOT 7
- Publish v1.3.0 to npm HOT 8
- Migrate from Travis CI to Github Actions HOT 3
- removePolicy not working HOT 1
- Limited to 6 policy arguments HOT 3
- v1.5 Performance regression HOT 3
- use ExistentConnection HOT 4
- [bug] removeFilteredPolicy is not working properly HOT 1
- The automated release is failing 🚨 HOT 2
- TypeORM adapter fails with ACL model HOT 1
- Custom database table name HOT 4
- Issue: ObjectID no longer be used in typeorm, please update to ObjectId HOT 3
- RESOLVE unable to resolve dependency tree HOT 2
- The lib directory is missing in version 1.6.0 HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from typeorm-adapter.