小编Ed *_*ood的帖子

基于角色的RESTful资源的应用程序结构

在使用RESTful资源路由时,是否存在实现用户角色的最佳共识方法?

说我有以下资源:

User has_many Tickets
Event has_many Tickets
Ticket belongs_to Person, Event
Run Code Online (Sandbox Code Playgroud)

然后进一步说我有两种类型的用户:客户和代理商.两者都将登录到系统,但具有基于其角色的不同资源访问和功能.例如:

客户可以访问:

  • 事件索引,显示
  • 故障单索引(由用户确定),显示,购买/创建,返回/删除
  • 人创造,展示,更新

代理可以访问:

  • 事件索引,显示,创建,更新,删除
  • 票务索引,显示,销售/创建,更新,退款/删除
  • 人员索引,显示,创建,更新,删除

以下4种一般方法中哪一种更清洁,更灵活?

角色文件夹中的独立控制器和命名空间中的资源,例如:

namespace "agent" do
  resources :events, :tickets, :people
end
namespace "customer" do
  resources :events, :tickets, :people
end
Run Code Online (Sandbox Code Playgroud)

按角色分隔控制器,例如:

AgentController
  def sell_ticket, etc

CustomerController
  def buy_ticket, etc
Run Code Online (Sandbox Code Playgroud)

共享控制器在需要时具有单独的操作,例如:

TicketController
  before_filter :customer_access, :only => :buy
  before_filter :agent_access, :except => :buy

  def buy  #accessed by customer to create ticket

  def sell   #accessed by agent to create ticket
Run Code Online (Sandbox Code Playgroud)

与条件语句共享的操作,例如:

TicketController
  def create …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails restful-authentication

6
推荐指数
2
解决办法
638
查看次数