【发布时间】:2017-02-25 17:17:37
【问题描述】:
我正在使用 Ruby on Rails 编写一个关于无线网络的应用程序。此应用程序由不同的角色组成:管理员、员工和访客。
我的一位同事已经按照 Michael Hartl 的指南制作了访问者部分(基本上 user 已替换为 visitor),现在我必须做休息。
不幸的是,她既没有使用 devise 也没有使用其他类似的宝石,我无法拆除她所有的作品,所以我不能使用它们。
在这个应用程序中,有 MACaddress 或 VLAN 等类,visitor 和employee/admin 都可以对它们进行一些操作,但是这些操作当然是不同的(根据角色不同的权限)。
我的主要问题来了。 考虑这样的事情:
class MacaddressesController < ApplicationController
before_action :logged_in_visitor, only: [:create, :destroy]
before_action :correct_visitor, only: [:destroy,:update]
def create
@macaddresses = current_visitor.macaddresses.build(macaddresses_params)
if @macaddresses.save
flash[:success] = "mac address created!"
redirect_to visitor_path(session[:visitor_id],:act => 'mynetwork')
else
@macaddresses = current_visitor.macaddresses.all
@visitor = current_visitor
render 'visitors/myNetwork'
end
end
def destroy
@macaddresses.destroy
redirect_to visitor_path(session[:visitor_id],:act => 'myNetwork',:del=>'true')
end
def update
if @macaddresses.update_attributes(macaddresses_params)
redirect_to visitor_path(session[:visitor_id],:act => 'myNetwork',:del=>'true')
else
@macaddresses = current_visitor.macaddresses.all
@visitor=current_visitor
render 'visitors/myNewtork2'
end
end
现在...如何根据用户的角色在 MACaddress 或其他类上定义 CRUD 不同的操作?
我什至创建了 _current_employee_,我如何使用它来做我需要的事情?
提前致谢。
【问题讨论】:
-
如果您的合作伙伴将用户转变为访客,这是否意味着您现在必须为管理员用户创建一个管理员模型,为员工用户创建一个员工模型?
-
没错,事实上,我创建了 Employee 模型及其控制器、视图等。但是当我必须在其他模型上共同定义 CRUD 操作时,我遇到了问题:例如,在上面的代码中,macaddress 上的 CRUD 操作是使用访问者定义的,但我如何使用员工定义它们?我可以使用 current_employee 来跟踪用户并在这些方法中添加一些 if/else 吗?
-
您的合作伙伴完全没有展望未来就做出了改变。
User不应该更改为Visitor。相反,User应该添加一个role列,这将使角色分支变得微不足道。你可以保留你的伴侣所做的大部分事情,但Visitor将不得不恢复为User——为了避免承认计划错误而跳过三千个火焰箍是不值得的。
标签: ruby-on-rails roles