如何在rails

时间:2017-07-02 16:09:36

标签: ruby-on-rails ruby devise cancan

我一直致力于在rails上学习ruby并构建Web应用程序。现在我很好奇我如何在rails中使数据用户特定。我知道我可以使用Devise进行身份验证。这样用户就可以登录,注销,注册等等。然后,对于任何类型的授权,您可以使用CanCan之类的东西。但是,我有兴趣了解如何根据每个用户分离数据。例如,如果我有一个用户添加新任务,则它特定于其页面。另一个用户将能够登录并查看不同的任务集。

3 个答案:

答案 0 :(得分:0)

首先设置用户has_many任务关系

表用户(id,username,...)和表任务(user_id,task_name,task_note),安全的关键是user_id里面的任务模型,基本上如果user_id为特定用户创建的任务,只能显示/仅由该用户编辑/销毁

内部任务控制器使用cancancan gem来检查权限

检查完宝石并知道如何设置能力等级后,基本设置如下

can :update, Task, user_id: @user.id
can :read, Task,  user_id: @user.id
can :destroy, Task,  user_id: @user.id

上面的代码含义如果任务的user_id与current_user.id 和this link about defining ability in cancancan

相同,则可以编辑/读取/销毁

答案 1 :(得分:0)

如果您正在使用Rails讨论multi-tenancy,请查看apartment。当你有大量的资源(模型)需要为你的应用程序的各种独立租户配置时,这当然必须完成。例如。各种公司'管理员登录通用作业门户。否则,通过在所有多租户资源查询之前使用额外检查,可以毫不费力地实现。同样,只有当我正确理解您的要求时,这一切才有效。

答案 2 :(得分:0)

Devise提供变量current_user。可以引用与User模型相关的任何关系。例如,如果用户has_many :tasks,您可以在控制器和视图中按current_user.tasks引用每个用户的特定任务。