casbin / casbin.js

An authorization library that supports access control models like ACL, RBAC, ABAC in Frontend Javascript
https://casbin.org/docs/en/frontend
Apache License 2.0
165 stars 37 forks source link

Dependency issues in Angualr #177

Closed fahussain closed 2 years ago

fahussain commented 3 years ago

I tried using casbin.js in my Angular project but it seems casbin is dependent on some core node.js modules, path stream and fs to be more specific. Angular 12 uses webpack 5 which does not allow core node.js modules to be included in a web app. I tried some workarounds but finally gave up since I found out that casbin.js does not support RBAC with domains as mentioned here https://github.com/casbin/casbin.js/issues/31.

casbin-bot commented 3 years ago

@nodece @Zxilly @Gabriel-403

nodece commented 3 years ago

@fahussain do you use the casbin.js@next? could you provide the model and policy?

fahussain commented 3 years ago

For my server side I use NestJS and yes casbin is working there. This is my model:

[request_definition]
r = subject, tenant, object, action

[policy_definition]
p = subject, tenant, object, action

[role_definition]
g = _, _, _
g2 = _, _, _

[policy_effect]
e = some(where (p.eft == allow)) && !some(where (p.eft == deny))

[matchers]
m = g(r.subject, p.subject, r.tenant) && g2(r.object, p.object, r.tenant) && r.tenant == p.tenant && r.action == p.action

I am not sure what you mean by casbin.js@next. I was hoping to use casbin.js on the frontdend in Angular to implement the policies. My policies are going to be dynamic and quite large, generated by an application in which admins can add Tenants, Roles, Users, Objects, Actions, Policies etc... On the server I am using TypeOrm adapter to store policies in MySQL.

Zxilly commented 3 years ago

@fahussain plz refer to https://github.com/casbin/casbin.js/tree/v1 to get the infomation about casbin.js@next. It is a totally refactor version and can work cross platform, like Angular. I suggest designing your own protocol for exchanging permission data between the front and back ends. The communication protocols pre-built in legacy casbin.js are not reliable.

Zxilly commented 3 years ago

@fahussain

I tried using casbin.js in my Angular project but it seems casbin is dependent on some core node.js modules

In short, casbin.js@next is cross-platform version of node-casbin.

giovanni-bertoncelli commented 2 years ago

I have the same issue here. The next release is not platform indipendent.

hsluoyz commented 2 years ago

@nodece

nodece commented 2 years ago

Can't casbin.js@next solve this?

giovanni-bertoncelli commented 2 years ago

Workaround:

Nope, casbin.js@next version does not resolve this without that workaround.

nodece commented 2 years ago

@giovanni-bertoncelli Could you provide a repository for reproduce this issue?

danverde commented 2 years ago

Experiencing the same thing. Here's a repo: https://github.com/danverde/CasbinJS-React/tree/broken I did make sure to install casbinjs@next. Looks like it ended up installing 1.0.0, rather than 1.0.1 that I got by installing casbin.js

hsluoyz commented 2 years ago

@nodece

nodece commented 2 years ago

Thanks @danverde, I know how to resolve it.

nodece commented 2 years ago

Because we are incorrect design, this version is confusing, we are decided to improve the node-casbin repo, the next version casbin has been released, the casbin@beta can be available on NPM.

but this version number is incorrect, should be 6.0.0-beta.x, not 5.14.0-beta.x. This version is working on React, and Ng.

danverde commented 2 years ago

@nodece So I need to use version 6.0.0-beta.x of the node-casbin repo rather than the casbin.js repo? or is/will there be a release of casbin.js built off the correct version of node-casbin?

nodece commented 2 years ago

So I need to use version 6.0.0-beta.x of the node-casbin repo rather than the casbin.js repo?

Yes, you can install this by yarn add casbin@beta, then select the 5.14.0-beta.3.

or is/will there be a release of casbin.js build off the correct version of node-casbin?

We don't continue to release the casbin.js to instead of node-casbin.

danverde commented 2 years ago

Installing casbin@next doesn't work: image

And node-casbin 5.14.0-beta.3 doesn't work in the browser either

danverde commented 2 years ago

I was able to get casbin.js running by ejecting the react project and then updating the webpack config file to disable source maps for node_modules and disabling the polyfill for path.

hsluoyz commented 2 years ago

@nodece

nodece commented 2 years ago

Sorry, casbin@beta is correct.

nodece commented 2 years ago

Installing casbin@next doesn't work: image

And node-casbin 5.14.0-beta.3 doesn't work in the browser either

Could you provide the log that doesn't work in the browser?