我很想知道是否有可能阻止沒有角色所有者或管理員的用戶訪問laravel應用程序中的某些控制器?在具有多種角色限制的方法之前
回答
是的,你可以。您可以使用路由過濾器來完成此操作。
routes.php文件
Route::group(['prefix' => 'admin', 'before' => 'auth.admin'), function()
{
// Your routes
}
]);
和filters.php
Route::filter('auth.admin', function()
{
// logic to set $isAdmin to true or false
if(!$isAdmin)
{
return Redirect::to('login')->with('flash_message', 'Please Login with your admin credentials');
}
});
但是,如果我有不止一種類型的用戶(例如管理員或所有者)可以訪問,那麼該怎麼辦。 – user3732216 2014-11-01 22:29:09
@ user3732216 - 然後,您只需添加一個新的過濾器與您的特定規則集。 或者,您可以使用名爲https://cartalyst.com/manual/sentry或其付費哨兵包的軟件包。不過,我個人對他們的文檔(或缺乏)感到不滿意,這意味着你必須做一些黑客工作才能做一些不尋常的事情。 – Gravy 2014-11-02 09:24:13
路由過濾器已經被提出,但因爲你的過濾器應該是控制器具體你可能想嘗試controller filters。
首先,讓我們來添加此控制器(S)
public function __construct()
{
$this->beforeFilter(function()
{
// check permissions
});
}
執行一個控制器動作之前,此函數被調用。
在那裏它取決於你想要做什麼。我剛纔猜測,因爲我不知道您的具體架構,但我想你想要做這樣的事情:
$user = Auth::user();
$role = $user->role->identifier;
if($role !== 'admin' && $role !== 'other-role-that-has-access'){
App::abort(401); // Throw an unauthorized error
}
而不是拋出一個錯誤,你可以也使重定向,渲染視圖或根本無論你想要什麼。只要做一些事情就會停止進一步的執行,所以你的控制器動作不會被調用
編輯
而不是使用閉合功能,你可以使用預定義的過濾器(從routes.php文件或filters.php)
$this->beforeFilter('filter-name', array('only' => array('fooAction', 'barAction')));
欲瞭解更多信息,請查看documentation
這是偉大的,但我有很多這些。那麼有沒有一種方法可以在路線文件中執行此操作,或者適用於過濾器文件。 – user3732216 2014-11-02 00:20:42
我個人不使用控制器過濾器。我更喜歡把這個邏輯放在路由文件中。 (分離關注點並保持代碼清潔)只需將控制器嵌入帶Route過濾器的'Route :: group'中即可。 – Gravy 2014-11-02 09:29:20
@Gravy這是真的。在我看來,它有點味道和要求。例如。將每個控制器路由封裝在一個組中,因爲它具有不同的角色不會吸引我。 (對我來說一個組應該是多條路線)。 我知道你可以指定沒有組的過濾器,但在某些情況下不像使用控制器過濾器那樣詳細(對於特定操作) – lukasgeiter 2014-11-02 11:57:20
- 1. 具有多種接口限制的方法參數
- 2. 報告具有某種權限但不是其他角色的所有角色
- 3. 具有多種方法的Mockery Doctrine/Repository
- 4. 如何在另一種方法之前強制執行一種方法?
- 5. 配置具有相同權限的多個角色
- 6. 具有多種排序方法
- 7. Rest API角色限制爲角色
- 8. 具有多種顏色的CPTScatterPlot
- 9. 如何在執行ASP.NET MVC4中的方法之前檢查用戶權限角色訪問權限
- 10. 具有多個限制
- 11. 具有多種功能的角度定製計算器
- 12. 如何限制特定範圍僅限具有特定角色的用戶?
- 13. 克服RichTextBox限制的一種方法?
- 14. IP限制Azure VM角色
- 15. 具有限定GET方法
- 16. 在Rails中運行另一種方法之前調用方法
- 17. XSLT兄弟之前的限制和解決方法
- 18. 角色提供者中這兩種方法有什麼區別?
- 19. Symfony用來加載角色實體的角色庫的哪種方法
- 20. 多種方法之間的java同步
- 21. 具有兩種或多種顏色(取決於xaxis值)的單直方圖
- 22. 如何在具有寫入權限的多個AWS賬戶之間建立跨賬戶角色賬戶?
- 23. 具有多個限制的字符數
- 24. 選擇具有多個限制的值
- 25. 如何解決具有多個角色的用戶的Zend_Acl權限衝突?
- 26. 有沒有辦法在控制器方法之前檢查控制器參數?
- 27. Winforms基於角色的安全限制
- 28. angular-permission:測試用戶具有控制器的角色或權限
- 29. 限制具有兩個或更多類名稱的方法參數的類型?
- 30. 揹包多種限制
當然有可能,但我們不會爲你做所有的工作。首先嚐試一下(我確定在互聯網上有關於此的教程),如果您遇到特定問題,請再次詢問。 – lukasgeiter 2014-11-01 21:06:43
好吧,我見過像屬於lukasgeiter的例子,但如果它是多種類型的用戶。 – user3732216 2014-11-01 23:01:25
我不確定我是否理解你,但我只是想向你提出一些想法;) 一種方法是爲每個角色分配一個數字,而較高者包含較低分數的許可。所以你可以檢查「權限級別」是否足夠高。 如果這不夠靈活,它會變得更加複雜... 無論你做什麼,你至少需要一個用戶表引用的角色表。可能通過數據透視表。如果你想得到更詳細的答案,可能試圖提出更具體的問題 – lukasgeiter 2014-11-01 23:11:52