在我的 MVC 应用程序中有 5 种类型的用户:
客人、客户、送货员、员工和管理员
如果某个用户试图查看他们无权访问的页面,他们将被重定向到某个页面并且脚本的其余部分将终止。
例如,如果客户或送货员尝试查看他们无权访问的页面,他们将被重定向回 http://www.mysite.com/members/ 或者例如如果客人试图访问成员(member)区,他们将被重定向到登录页面。
我的 Auth 类负责检查,它还负责登录过程。
一旦 $auth->login($username, $password) 验证它调用的登录详细信息
$this->http->redirect() 在 login() 方法的底部。
public function redirect() {
if($this->auth->isLoggedIn()) {
switch($_SESSION['accountType']) {
case 1:
$url = $this->config->setting('url.members');
break;
case 2:
$url = $this->config->setting('url.members');
break;
case 3:
$url = $this->config->setting('url.staff');
break;
case 4:
$url = $this->config->setting('url.admin');
break;
}
}
else {
$url = $this->config->setting('url.base') . 'login';
}
$this->setHeader('Location', $url);
}
稍后会调用 $http->respond() 方法,它会发送任何添加的 header (如上面添加的“Location” header )。
我认为 redirect() 方法正在做它不应该做的工作,但我不确定。在我看来,我的 Http 类不应该检查人们是否登录以及人们拥有什么类型的帐户,它应该只做一些事情,比如添加 header 并将响应发送回客户端,但是那么在 Auth 类中也有一个 redirect() 方法似乎是错误的,因为它应该只处理授权。
任何想法都将非常感谢。
最佳答案
Auth 类不应该确定您将被重定向到的链接,但它应该提供 Http 类进行正确重定向所需的指示。这是您的方法的问题:您的 Http 类知道的太多了。现在,如果 url 本身是在 Auth 类中计算的,那么现在 Auth 类知道的太多了。主要思想是使用带参数的重定向方法,参数应该在调用者类中决定(无论是 Auth 还是其他)。
关于php - 我认为我的 Http 类可能正在做它不应该做的工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14101939/
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val
是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我喜欢使用Textile或Markdown为我的项目编写自述文件,但是当我生成RDoc时,自述文件被解释为RDoc并且看起来非常糟糕。有没有办法让RDoc通过RedCloth或BlueCloth而不是它自己的格式化程序运行文件?它可以配置为自动检测文件后缀的格式吗?(例如README.textile通过RedCloth运行,但README.mdown通过BlueCloth运行) 最佳答案 使用YARD直接代替RDoc将允许您包含Textile或Markdown文件,只要它们的文件后缀是合理的。我经常使用类似于以下Rake任务的东西:
rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送
我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
Rails中有没有一种方法可以提取与路由关联的HTTP动词?例如,给定这样的路线:将“users”匹配到:“users#show”,通过:[:get,:post]我能实现这样的目标吗?users_path.respond_to?(:get)(显然#respond_to不是正确的方法)我最接近的是通过执行以下操作,但它似乎并不令人满意。Rails.application.routes.routes.named_routes["users"].constraints[:request_method]#=>/^GET$/对于上下文,我有一个设置cookie然后执行redirect_to:ba