Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 锁紧螺栓2限制功能只有一个可能的故障代码_Scala_Playframework 2.1_Deadbolt 2 - Fatal编程技术网

Scala 锁紧螺栓2限制功能只有一个可能的故障代码

Scala 锁紧螺栓2限制功能只有一个可能的故障代码,scala,playframework-2.1,deadbolt-2,Scala,Playframework 2.1,Deadbolt 2,这个问题可能有点哲学方面 我一直在我的游戏应用程序中使用Deadbolt 2(Scala),效果非常好 在查看(第47行)时,我注意到它将调用onAuthFailure,原因如下: 会话中没有用户(没有主题) 操作未指定任何角色 用户尝试的操作不具有一个或多个必需角色 在我的应用程序UI中,我希望为每个应用程序接收不同的状态代码,以便未登录的用户(条件1)将被重定向到登录页面,但条件3只需一个警告就可以更优雅地处理(因为它们无论如何都不会造成伤害,并且可能在具有“只读”访问权限时意外尝试编辑-可

这个问题可能有点哲学方面

我一直在我的游戏应用程序中使用Deadbolt 2(Scala),效果非常好

在查看(第47行)时,我注意到它将调用onAuthFailure,原因如下:

  • 会话中没有用户(没有主题)
  • 操作未指定任何角色
  • 用户尝试的操作不具有一个或多个必需角色
  • 在我的应用程序UI中,我希望为每个应用程序接收不同的状态代码,以便未登录的用户(条件1)将被重定向到登录页面,但条件3只需一个警告就可以更优雅地处理(因为它们无论如何都不会造成伤害,并且可能在具有“只读”访问权限时意外尝试编辑-可能是UI错误,但再次登录有点苛刻)

    但是,如果我只能接受2个状态代码,我会想区分1和其他2个状态代码。我可以看到如何实现这一点,但我希望就这样做的优点获得其他意见

    如果我要实现这个更改,看起来我可以在我自己的DeadboltActions特性扩展中重写Restrict函数


    我对scala有点陌生,因此对于如何最好地实现这些目标,我愿意接受更多的想法。

    我决定只添加代码来区分条件1和条件2或3,如下所示:

    在MyDeadboltHandler中:

    class MyDeadboltHandler(dynamicResourceHandler: Option[DynamicResourceHandler] = None) extends DeadboltHandler {
    ...
      def onAuthFailure[A](request: Request[A]): Result = {
        Logger.error("authentication failure")
        val json = new JsonStatus("Failed to authenticate", -1).toJson.toString
        if(noUserInSession(request)){
          Results.Forbidden(json).withHeaders("Access-Control-Allow-Origin" -> "*")
        }
        else{
          Results.Unauthorized (json).withHeaders("Access-Control-Allow-Origin" -> "*")
        }
      }
    
      def noUserInSession(request:RequestHeader) = {
        username(request) match {
          case Some(u:String) => false
          case _ => true
        }
      }
    

    这对我来说效果很好,不会影响基本的Deadbolt-2功能。

    我遇到的一个问题是,身份验证和授权之间存在明显的区别。可以对用户进行身份验证(使用有效凭据登录),但可能未经授权(没有特定操作所需的角色)。如何在运行scala测试时模拟这些函数