Rails 尝试使用 cancancan,数据是存在什么地方的啊?

lukefan · 2020年12月25日 · 最后由 xinyuewaisong 回复于 2021年01月02日 · 479 次阅读

尝试使用 cancancan 加入了: gem 'cancancan' gem 'cancancan-mongoid' 执行了: bundle install rails g cancan:ability

然后呢? user.admin?这个 admin 是存在什么地方的?包括哪些 role 信息是存在什么地方的? 是不是我少做了什么?

新项目其实建议用 pundit,更可控,user.admin? 一般都是 users 数据表里面又个 boolean 字段,叫 admin,?是 ruby 惯用法,返回 true/false 的方法或者属性(这个在 ruby 里面也不区分)。

ericguo 回复

我用 cancancan 是因为要用 rails_admin 以后前端就用 react 和 webpack,并不需要那么复杂的权限管理了。 能够有一个系统修改一下后端就好了。

ericguo 回复

我现在遇到的问题是,加了 gem 'cancancan-mongoid'之后,依然报错,说是没有定义过 activerecord。

ericguo 回复

rails_admin 好像是也可以用 pundit,回头准备试试。cancancan 即使要用 mongoid,项目中也必须有 ActiveRecord,否则会报错。

通常我的项目都是用 rails new -O 指令,把这部分去掉的。 尝试了一下,加上 ActiveRecord 之后,再上 mongoid,cancancan 能跑了,devise 却报错了。 还是很麻烦啊。 不知道 pundit 对 mongoid 的支持如何。好像文档要比 cancancan 少很多啊。

无论什么形式的数据存储,最后都转化为 “文本”,可以接写个 YAML 或者 JSON 读取,也可以用数据库 user -> role -> permission,考虑细粒度控制最后都是开发者维护这个内容。

lukefan 回复

rails 生态只看文档肯定是不行的,还要看代码,pundit 代码很干净,就一层 policy 抽象,scope/action 权限确认。

ruby117 回复

其实我不喜欢 user->role->permission 这样的模型,因为根据过去经验,role 会爆炸,配置到后面也会超级麻烦,特别是如果用户可以有多个 role,一个 role 可以有多个权限,再来一个 role 可以嵌套 role 以后,你都不知道用户是怎么拿到这个权限的。。。

不过我尝试过直接根据业务规则直接写控制权限逻辑后发现,有时候用户又需要一个用户能访问的某个权限的名单,所以我现在感觉,直接 user->permission 这样的数据模型其实最方便,扩展性也最好,也简单。嫌配置麻烦的话,写一段自动生成 user_permission 的代码就好了。

ericguo 回复

user_permission 这种方案在业务规模较小的时候确实好用,控制逻辑稍微复杂些就比较麻烦了,用 role 最好是组合而不是嵌套。你说的麻烦应该可以通过树的表现形式解决

我觉得我是在做 gem 的时候,没有规定版本,所以搞得乱七八糟的。 其实,web 应用、移动应用通常用户只分为两个大类,用户和管理人员。管理人员是很少的少数,即使在里面稍微再做一些细分,其实也都不是那么重要了。

对于用户来说,只要能够确保不被黑客攻击就够了。相对来说并不那么复杂,搞得复杂了也没有意义。

对于管理人员来说,即使再复杂也无所谓,毕竟频度不高。

我是一个业余程序员,只是把学习新技术作为一种类似于打游戏的活动。 现在需要找一种方法,放在 graphql 里面,可以让 react 和 flutter 编写的前端,可以安全的取到后台的数据,稍微做一些验证,不被人随便存取,也就够了。

管理端,其实无所谓了。好玩儿就折腾一下。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号