2011-04-04 33 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

相關問題