【发布时间】:2011-04-17 07:49:43
【问题描述】:
在使用 RESTful 资源路由时,是否有一致的最佳方法来实现用户角色?
假设我有以下资源:
User has_many Tickets
Event has_many Tickets
Ticket belongs_to Person, Event
然后进一步说我有两种类型的用户:客户和代理。两者都将登录系统,但根据其角色具有不同的资源访问权限和功能。例如:
客户可以访问:
- 事件索引,显示
- 票证索引(按用户范围)、显示、购买/创建、返回/删除
- 个人创建、显示、更新
代理可以访问:
- 事件索引、显示、创建、更新、删除
- 门票索引、显示、销售/创建、更新、退款/删除
- 人物索引、显示、创建、更新、删除
以下 4 种通用方法中哪一种更简洁、更灵活?
角色文件夹中的独立控制器和命名空间中的资源,例如:
namespace "agent" do
resources :events, :tickets, :people
end
namespace "customer" do
resources :events, :tickets, :people
end
按角色分隔控制器,例如:
AgentController
def sell_ticket, etc
CustomerController
def buy_ticket, etc
在需要时具有单独操作的共享控制器,例如:
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
与条件语句共享操作,例如:
TicketController
def create
if @role == :customer
#buy ticket
elsif @role == :customer
#sell ticket
end
end
【问题讨论】:
标签: ruby-on-rails restful-authentication