【问题标题】:how to make data user specific in rails如何在rails中使数据用户特定
【发布时间】:2017-12-05 23:12:10
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails ruby devise cancan


    【解决方案1】:

    首先你设置用户 has_many 任务关系

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

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

    在你检查了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

    【讨论】:

    • 感谢此信息非常有帮助,但我认为它不能解决我的问题。我想要做的是让每个用户都有一组单独的任务。我不希望所有用户都能够登录并看到相同的任务。
    • 对于您的情况,然后在任务模型中添加额外的列作为 task_group_id,如果 task_group_id = 1,则它用于 id=1 的用户,如果 task_group_id=2,则它用于 id=2 的用户,. ..
    【解决方案2】:

    如果您正在谈论 multi-tenancy 和 Rails,请查看 apartment。当您必须为应用程序的各种隔离租户配置大量资源(模型)时,这当然必须完成。例如。各种公司的管理员登录通用工作门户。否则,可以通过在所有多租户资源查询之前使用额外的检查来轻松实现。同样,只有当我正确理解您的要求时,所有这些才是有效的。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-14
        • 2014-04-19
        • 2020-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多