2017-04-24 68 views
0

我創建一個場所上市程序,爲此,我需要分配特定用戶的經理對某些場所,角色「venue_manager」下。經理只能訪問分配給他/她的場地。上市地點與基於角色管理器應用程序

我真的不能找出理想的方式來做到這一點。 在此先感謝!

回答

1

基本上,你必須在2份分割在這裏你的應用程序:

分配特定用戶的經理對某些場所,角色 「venue_manager」下。

您可以has_and_belongs_to_many協會,爲用戶/地點在那裏的場地可以有很多管理人員和用戶可以經理很多場館做到這一點。您還可以使用角色來簡化它,所以無論您何時將某位經理分配到某個場地,只需在roles列表中添加新角色即可!角色可以是這樣的:["venue_A_role", "venue_B_role", "venue_C_role"], generated like "venue_#{venue.name}_role"

經理應該只能訪問分配給他場館/她

可以在控制器動作檢查這,大概show,如果當前用戶實際可訪問到特定場所(使用角色或關係)。 如果你使用的角色像上面,你可以檢查這樣的: venue = Venue.find(params[:id]) if current_user.roles.includes? venue.role_name ........ end 其中#role_name只是在Venue類負責生成名稱作爲角色的方法!

我會建議使用一些授權庫像權威人士或慘慘您的身份驗證邏輯會從控制器中分離出來。

希望這會幫助你!

+0

好吧,這也是一個不錯的辦法,目前我所做的是, 我有一個'的has_many:managed_venue, - > {} Venue.all,CLASS_NAME:我在我的用戶已經使用「Venue'' 關聯。 rb class 我將場地分配給用戶,然後當我需要訪問時,我只需要 '@venues = current_user.managed_venues' –

+0

好吧,最後一件事就是製作授權邏輯,用戶只能訪問他的場地!你可以在VenuesController#show中通過檢查current_user.managed_venues包含該特定地點,然後執行一些適當的操作! – zauzaj

+0

是的,我在api控制器中有一個輔助方法,在這裏它檢查用戶的角色類型以及場景是否存在於current_user.managed場地中。 現在很好用! 謝謝! :d –

0

在用戶表中,您可以添加要與相關聯的任何角色布爾列。您可以將它們初始化爲默認值爲零,然後在用戶控制器中編寫方法來切換它們:@user.toggle!('venue_manager')。最後,您可以檢查您的視圖或控制器@user.venue_manager值是零還是一。

+0

是的,但我需要一個用戶只能訪問,我分配給用戶的特定場所的訪問。例如,我有地點AB&C,而且我有一個用戶X.我可能需要能夠爲場地A和B分配對用戶X的訪問權 –

+0

然後,您可以使用一個單獨的表格,您可以分配完整的場地從用戶表到場地表的一對多關係。 – DevJem

相關問題