问题标签 [casl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
532 浏览

reactjs - 显示基于角色 reactjs 的动作按钮

我正在开发一个基于角色的应用程序。我们有 4 种不同的服务,我们必须根据角色显示操作按钮。例如,管理员可以看到所有操作按钮,但财务团队的人员只能看到财务操作按钮。

我正在使用 CASL js 库,但很难理解它是如何工作的。现在我的所有操作按钮都显示出来了。

能力.js

反应 app.js

0 投票
1 回答
968 浏览

vue.js - CASL 在 Vue 生产模式下无法正常工作

我已经为特定角色定义了一些规则,它们都运行良好。但是当我在生产模式下构建 vue 项目时,所有规则都给出了错误。详情如下:

我有这个文件ability.js,它给了我规则:

我在 App.vue 中更新这样的规则(所有值都有效)

我正在使用以下代码检查权限。

现在,当我在本地/开发模式下运行此代码时。它工作正常(在需要的地方给了我真实的信息),但是当我生成生产版本时,它没有按预期工作(总是给我错误的信息)

开发构建命令:

开发构建 .env.local

生产构建命令:

生产构建 .env.prod

让我知道为什么会这样。

复制了这里的步骤。

按照以下链接查看运行和预期版本: LINK 01 输出:

在本地克隆同一个项目,或者从 [github 2下载它 运行后,我们得到这个输出:

0 投票
1 回答
427 浏览

vuejs2 - 应用启动时如何初始化能力实例规则?

我正在尝试使用 vuex 和 Nuxt 实现 CASL。当我的应用程序启动并且我已经登录时,尝试初始化能力规则时遇到问题。

基本上,我想在应用程序启动时获取规则并更新 Ability 实例。但是,当我尝试从商店获取规则时,它会返回null. 目前,我需要注销并登录以获取规则。

商店/ability.js

配置/能力.js

存储/index.js

谢谢你的帮助。

0 投票
1 回答
2627 浏览

javascript - Casl Vue根据来自异步获取请求的角色设置重新加载+路由器+登录后的能力

也许我忽略了一些非常容易的事情,但是我已经看了两天了,我无法弄清楚。

我有一个 Vue 应用程序,我想根据他的角色指定用户可以看到什么或他可以去哪里。我为此使用 casl-vue。

我想在两个时刻设置该功能,加载页面时和登录后。

页面加载时

当我使用同步函数注册功能时,一切正常,如下所示:

main.js

能力.js

但是,当我想使用返回承诺 (getCurrentUserRole()) 的函数获取角色时,因此使函数异步如下:

能力.js

我收到以下错误:

“TypeError:ability.on 不是函数”

登录后

值得庆幸的是,登录后更新能力规则可以使用 this.$ability.update:

但是,我似乎无法在页面加载时使用此功能,因为当我将其放入 App.vue 中时(例如,在beforeCreate()or中created()),在我调用ability.update 之前页面已经加载,因此更新能力“为时已晚” .

Vue路由器

我还想访问我的 Vue 路由器实例中的能力可以方法(以控制我的用户可以访问的路由),但是我如何访问我的路由器文件中的能力实例?

如果在任何情况下我的问题没有得到很好的解释,请告诉我!

如果有人可以帮助我设置设置结构,我将不胜感激。

依赖项:

0 投票
2 回答
665 浏览

angular - 在 Angular 8 中授权资源的最佳方式是什么

我正在尝试在角度 8 中处理基于资源(或声明)的授权。我发现了一个CASL角度操作能力管理。

所以,我想在 Angular 8 中使用基于动作的授权来保护所有的 crud 动作。

它也应该是基于声明的授权。但是,我不知道哪个是最好的使用方法。

在 Angular 8 中进行基于动作的授权的最佳方法是什么?

谢谢

0 投票
1 回答
376 浏览

javascript - 找不到管道“can”

我正在尝试为我的应用程序实施CASL能力管理器angular 8。我做了包使用指南中描述的所有事情,但can pipe我的component html template.

所以这是我的应用程序模块:

我也实现了这样的 casl 示例

createAbility功能如下图:

我还会告诉它this.ability.can()通过注入类在我的组件类中Ability工作。但它不能与can pipe

我应该怎么做才能摆脱这个错误?

谢谢

0 投票
1 回答
701 浏览

typescript - 全局注册Can组件时casl + vue上的Vue错误

我用 vue-cli 创建了一个简单的 vue + typescript 应用程序。按照https://stalniy.github.io/casl/v4/en/package/casl-vue的说明,我声明了以下内容:

但我在第二个参数上得到错误:

没有重载匹配此调用。最后一个重载给出了以下错误。'FunctionalComponentOptions, PropsDefinition>>' 类型的参数不可分配给'ComponentOptions, DefaultMethods, DefaultComputed, PropsDefinition>, Record<...>>' 类型的参数。属性“渲染”的类型不兼容。类型 '((this: undefined, createElement: CreateElement, context: RenderContext>) => VNode | VNode[]) | undefined' 不可分配给类型 '((createElement: CreateElement, hack: RenderContext>) => VNode) | 不明确的'。类型 '(this: undefined, createElement: CreateElement, context: RenderContext>) => VNode | VNode[]' 不可分配给类型 '(createElement: CreateElement, hack: RenderContext>) => VNode'。输入'VNode | VNode[]' 不可分配给类型 'VNode'。类型“VNode[]”缺少类型“VNode”的以下属性:isRootInsert、isCommentts(2769) vue.d.ts(112, 3):此处声明了最后一个重载。

我的 package.json 包含:

提前感谢您对此的任何帮助。抱歉,如果我错过了这篇 Q 帖子的一些信息(这是我的第一篇)。

0 投票
1 回答
1073 浏览

javascript - 后端和前端之间使用 CASL 库共享的用户授权

我正在寻找一种在前端(React)和后端(Node.js、Koa、GraphQL)中实现授权的方法。我偶然发现了 casl 包:https ://github.com/stalniy/casl 。

虽然后端授权对我来说似乎很简单,但我没有得到的是如何将我的授权规则从后端共享到前端。一篇中型帖子建议使用 JWT 代币。如何使用 JWT 令牌来做到这一点?

https://medium.com/dailyjs/casl-and-cancan-permissions-sharing-between-ui-and-api-5f1fa8b4bec

0 投票
1 回答
1347 浏览

javascript - 如何使用 CASL 定义 JSON 能力

我一直在阅读 CASL 库的文档,显然您可以使用 JSON 定义功能,如下所示:

但是现在我正在尝试这样一个虚拟示例,但它不起作用,不知道为什么:

0 投票
1 回答
73 浏览

casl - 有没有办法区分查询和数据条件

我有一个名为documentations. 修补用户时documentation,用户只能将editing字段设置为他自己的user._idnull. 此外,用户只能修补documenations他自己公司的补丁。

我已将我的权限存储在 MongoDB 数据库中:

有没有办法editing用 CASL 实现字段逻辑?

有什么方法可以区分查询和数据条件吗?