Rails设计问题:我应该如何为多个权限级别构建控制器?

时间:2011-08-06 05:51:14

标签: ruby-on-rails restful-architecture

我正在撰写一个具有多级权限的网站。我的系统中基本上有3种用户。他们是管理员,业务和消费者(普通用户)。我们只是说我正在建立一个广告网站。

所以我有一个模型“Campaign”,它有一个带有rails scaffold的RESTful API。企业可以创建广告系列,用户只能看到他们想要加入的广告系列,管理员可以做所有事情。

现在,我知道如何应用before_filter并严格检查可以访问特定视图的用户类型。

但是,每个级别的权限都有自己独特的视图。

企业可以查看其广告系列的见解和分析。 (让我们称之为广告系列/分析) 消费者可以看到他们参与的所有广告系列。(让我们称之为此广告系列/您的广告) 管理员可以通过特殊视图监控网站的活动。 (让我们称之为campaign / monitor_businesses。)

现在,我的CampaignController具有通常的RESTful视图+分析+您的+ monitor_businesses。当然,我有多个数据模型(不仅仅是广告系列),这使我的RESTful控制器对这些数据模型非常混乱。

我该怎么办?我正在认真考虑启动一个ConsumerController,然后启动一个BusinessController,并将所有相关的视图放在这些控制器中。我不知道这是否违反了“RESTful”原则,但我想知道有哪些更好的模式可以解决我的问题。

我愿意接受各种建议。

2 个答案:

答案 0 :(得分:2)

为什么不尝试使用CanCan gem进行角色管理? 您可以使用bundler安装任何gem。

设置起来很容易,并且无法通过创建额外的控制器或操作来创建相同的样板代码。

为了让您入门,我建议您访问主页上的文档。有关defining what a user can do here的更多信息,您可以看到how to check for abilities here。 您还需要向要强制执行权限的控制器添加一行,您可以阅读here

如果标准文档不足以让您入门,为什么不查看Railscast 192。它向您展示了如何使用CanCan启动和运行它是一个很好的来源,因为Ryan Bates是截屏视频的创建者以及CanCan的创建者。如果视频移动速度过快,则会显示文本版本here

答案 1 :(得分:0)

你不尝试使用cancan gem进行角色管理http://rubygems.org/gems/cancan

或做gem install cancan我希望这有帮助。