问题标签 [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.
reactjs - 显示基于角色 reactjs 的动作按钮
我正在开发一个基于角色的应用程序。我们有 4 种不同的服务,我们必须根据角色显示操作按钮。例如,管理员可以看到所有操作按钮,但财务团队的人员只能看到财务操作按钮。
我正在使用 CASL js 库,但很难理解它是如何工作的。现在我的所有操作按钮都显示出来了。
能力.js
反应 app.js
vue.js - CASL 在 Vue 生产模式下无法正常工作
我已经为特定角色定义了一些规则,它们都运行良好。但是当我在生产模式下构建 vue 项目时,所有规则都给出了错误。详情如下:
我有这个文件ability.js
,它给了我规则:
我在 App.vue 中更新这样的规则(所有值都有效)
我正在使用以下代码检查权限。
现在,当我在本地/开发模式下运行此代码时。它工作正常(在需要的地方给了我真实的信息),但是当我生成生产版本时,它没有按预期工作(总是给我错误的信息)
开发构建命令:
开发构建 .env.local
生产构建命令:
生产构建 .env.prod
让我知道为什么会这样。
复制了这里的步骤。
按照以下链接查看运行和预期版本: LINK 01 输出:
在本地克隆同一个项目,或者从 [github 2下载它 运行后,我们得到这个输出:
vuejs2 - 应用启动时如何初始化能力实例规则?
我正在尝试使用 vuex 和 Nuxt 实现 CASL。当我的应用程序启动并且我已经登录时,尝试初始化能力规则时遇到问题。
基本上,我想在应用程序启动时获取规则并更新 Ability 实例。但是,当我尝试从商店获取规则时,它会返回null
. 目前,我需要注销并登录以获取规则。
商店/ability.js
配置/能力.js
存储/index.js
谢谢你的帮助。
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 路由器实例中的能力可以方法(以控制我的用户可以访问的路由),但是我如何访问我的路由器文件中的能力实例?
如果在任何情况下我的问题没有得到很好的解释,请告诉我!
如果有人可以帮助我设置设置结构,我将不胜感激。
依赖项:
angular - 在 Angular 8 中授权资源的最佳方式是什么
我正在尝试在角度 8 中处理基于资源(或声明)的授权。我发现了一个CASL角度操作能力管理。
所以,我想在 Angular 8 中使用基于动作的授权来保护所有的 crud 动作。
它也应该是基于声明的授权。但是,我不知道哪个是最好的使用方法。
在 Angular 8 中进行基于动作的授权的最佳方法是什么?
谢谢
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 帖子的一些信息(这是我的第一篇)。
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
javascript - 如何使用 CASL 定义 JSON 能力
我一直在阅读 CASL 库的文档,显然您可以使用 JSON 定义功能,如下所示:
但是现在我正在尝试这样一个虚拟示例,但它不起作用,不知道为什么:
casl - 有没有办法区分查询和数据条件
我有一个名为documentations
. 修补用户时documentation
,用户只能将editing
字段设置为他自己的user._id
或null
. 此外,用户只能修补documenations
他自己公司的补丁。
我已将我的权限存储在 MongoDB 数据库中:
有没有办法editing
用 CASL 实现字段逻辑?
有什么方法可以区分查询和数据条件吗?