2011-04-04 28 views
0

我有一个用户模型,设计管理 - 即所有用户都有电子邮件 addy /用户名/密码等。如果用户登录,根据他们的权限,他们可以访问 不同的东西。这工作正常。我可以在Rails 3中的不同模型上使用token_authenticable(来自Devise)吗?

但我有一个客户端模型,我想授予令牌,以便他们可以访问一个特定控制器上的一个特定操作。

理想情况下,我想生成客户端[email protected](记住,这不是一个User.email,但Client.email)令牌,使他们能够为我 stages控制器,其中台访问compare行动有一个ID为7

我不希望他们能够访问除id7以外的任何其他阶段,我不希望他们必须登录。即,一旦他们访问特定的URL(例如,myapp.com/stages/7/compare?token={unique token generated by devise})他们可以看到它。但他们无法拿到这个标记,例如去stages/8/compare

我有可能使用Devise做到这一点吗?

如果是这样,怎么样?

回答

1

制定的TokenAuthenticatable策略的目的是在设计通过令牌管理用户签署。因此,devise必须已经管理您登录的模型,而且这听起来像在您的应用程序中,Client未由Devise管理。在这种情况下,我认为这不会对你有所帮助。

+0

你说得对。我的'客户端'模型不是由Devise管理的。但是你确定它不能用于其他模型吗?正如我所说,这是我的第一个倾向,但有人告诉我,否则我无法让他们给我更多的细节,设计文件还不足以教育我在这里。 – marcamillion 2011-04-04 01:54:35

+0

我以前错了,但这听起来不对。如果Devise不管理模型,为什么Devise会签署一个模型?现在,也许你可以使用'token_authenticatable'作为登录策略,将Devise添加到'Client'模型中,并从那里开始,保存一些与客户端应该访问的额外数据。但是,请注意,设计令牌是按型号的,而不是“每个许可”,因为它听起来像您想要的(例如,“客户端”可能有多个令牌,每个令牌都用于不同的比较URL)。但是国际海事组织设计是这样的 - 为Client提供许多带有相关数据的'token'。 – 2011-04-04 01:58:36

+0

Hrmm .....我已经开始了为客户端提供许多令牌的过程 - 但下一步是创建一个类似'stage_id','client_id','client_token'的连接表(它是在客户端模型)。我写了一个自定义的'generate_client_token'方法,因此给定所有这些对使用Devise有什么好处?我的方法只是令牌的一代。没有其他类似Devise的。 – marcamillion 2011-04-04 03:08:02

0

设计主要是通过身份验证。你需要一个授权插件。例如尝试使用cancan(https://github.com/ryanb/cancan)。这将允许您向用户授予“角色”并授权他们执行(或不执行)某些操作。

还有可用Railscast:http://railscasts.com/episodes/192-authorization-with-cancan

+0

我已经使用decl_auth来做到这一点。我知道Devise拥有token_authenticable,今天被告知我可以用它来做我想做的事,但我没有再给出任何迹象。我搜索了Devise的文档,但没有看到有关我的具体要求的很多讨论。所以我想在这里问。除了由decl_auth + devise管理的用于常规用户授权的事情外,这更多的是通过身份验证。 – marcamillion 2011-04-04 01:40:01

相关问题