2013-11-14 178 views
1

我正在編寫一個流星應用程序,並且已經習慣了新的鐵路路由器軟件包(與之前使用的路由器軟件包相反)。鐵路由器路由允許/拒絕

我有一個只能由具有特定屬性的用戶訪問的路由集合。具體來說,我使用的是角色包。我目前實現這一目標的方法是定義一個運行條件的before函數,如果用戶沒有適當的角色,則會重定向到登錄或錯誤頁面。這裏只是一個快速(咖啡腳本)的例子:

this.route 'home', 
    path: '/' 
    template: 'dashboard' 
    before: -> 
     unless Meteor.userId() 
     this.redirect 'userUnauthorized' 
     do this.stop 

我的問題是,有沒有更好的方法來做到這一點?似乎應該有一些方法來添加權限集,並將該權限集應用於路由,而不是爲每條路由編寫訪問條件。

回答

1

您可以在您的路線中設置一個全局「之前」。我沒有使用的角色在我目前的應用程序,但我們在全球範圍內基於他們是否被簽署重定向用戶

你也許可以做這樣的事情:

Router.before(function() { 
    unless(Meteor.userId()) { 
    this.redirect('userUnauthorized'); 
    do (this.stop) 
    } 
}, {except: ['userUnauthorized', 'otherPageUnauthorizedUsersAllowedToSee']}); 

我們使用類似的東西就在我們的下方Router.configure()

+0

嗨斯賓塞。你的方法是否安全?我的意思是,路由器在客戶端上可用。 –

+2

無論是否重定向,您都無法阻止用戶看到您發送給客戶端的任何模板。正如你所說,路由器可以在客戶端上使用,據我所知,路由更像是UI/UX類型的東西。 您可以並且應該做的是確保您不會向用戶發送任何收集或數據,而這些用戶不應該看到它們,並且您可以執行此操作。如果您將敏感數據嵌入到視圖模板中,則會出現問題。最終,用戶可以訪問我們應用的任何頁面。該頁面上呈現的內容基於該用戶的角色/權限。 – Spencer