小编Max*_*Max的帖子

使用CanCan进行上下文感知授权

我想使用CanCan来处理我的权限.我的网站有许多不同的权限级别,其中大多数都是上下文感知的.例如,以下是我的3个主要模型中的关系:

class User < ActiveRecord::Base
  has_many :league_relations
  has_many :leagues, :through => :league_relations
end

class League < ActiveRecord::Base
  has_many :league_relations
  has_many :users, :through => :league_relations
end

class LeagueRelation < ActiveRecord::Base
  belongs_to :user
  belongs_to :league
end
Run Code Online (Sandbox Code Playgroud)

注意,LeagueRelations是联赛的嵌套资源.我想要做的是允许用户修改联赛,并根据存储在league_relation中的数据来衡量每个用户的授权.然后,我希望用户仅根据存储在用户模型中的数据来修改联盟关系.

简洁:我基本上希望使用LeagueRelations来授权联盟行动,并使用User来授权LeagueRelations行动.ie league_relation.owner = true删除联盟,但是user.owner?必须为true才能删除LeagueRelation.如何在联盟控制器内部基于league_relation的属性进行授权,并在其他模型上的其他控制器中授权其他操作.如果您需要更多说明,请发表评论.

谢谢.

ruby ruby-on-rails cancan ruby-on-rails-3

7
推荐指数
1
解决办法
1040
查看次数

是否有更多的pythonic方法来编写只更新变量的while循环?

我有这个while循环,我想知道它们是否是一种更加pythonic的方式来编写它:

k = 1
while np.sum(s[0:k]) / s_sum < retained_variance:
    k += 1
Run Code Online (Sandbox Code Playgroud)

s是一个numpy向量.谢谢!

python numpy

6
推荐指数
1
解决办法
127
查看次数

如何告诉Spring使用Java映射来解析属性占位符?

我有一个Map<String, String>,我想告诉Spring在创建bean和解析属性占位符时使用它.最简单的方法是什么?这是一个例子:

@Component
public class MyClass {
   private String myValue;

    @Autowired
    public MyClass(@Value("${key.in.map}") String myValue) {
        this.myValue = myValue;
    }

    public String getMyValue() {
        return myValue;
    }
}

public static void main(String[] args) {
    Map<String, String> propertyMap = new HashMap<>();
    propertyMap.put("key.in.map", "value.in.map");
    ApplicationContext ctx = ...;
    // Do something???
    ctx.getBean(MyClass.class).getMyValue(); // Should return "value.in.map"
}
Run Code Online (Sandbox Code Playgroud)

java spring

6
推荐指数
1
解决办法
1348
查看次数

来自Docker容器内运行的服务器的空响应

我的笔记本电脑上运行了一个包含服务器的Docker容器.服务器正在运行localhost:9000.我在我的笔记本电脑和VM之间建立了端口转发,如下所示:

VBoxManage modifyvm "default" --natpf1 "tcp-port9000,tcp,,9000,,9000";
Run Code Online (Sandbox Code Playgroud)

现在,我尝试启动这样的容器:

docker run -p 9000:9000 -t -i my-image
Run Code Online (Sandbox Code Playgroud)

但是当我尝试连接时,我收到以下错误:

$ curl localhost:9000                                                   
> curl: (52) Empty reply from server
Run Code Online (Sandbox Code Playgroud)

查看我的服务器的日志,请求永远不会在那里,所以其他一些必须是错误的.我该如何诊断这个问题?

java macos docker

6
推荐指数
0
解决办法
3144
查看次数

使用JavaScript触发表单提交

我有一个要通过JavaScript提交的表单。显然,这可以通过以下方法实现:

document.getElementById("myForm").submit();
Run Code Online (Sandbox Code Playgroud)

问题是我有一个submit事件监听器,如下所示:

document.getElementById("myForm").addEventListener("submit", function(event) {
    event.preventDefault();
    // Other work
});
Run Code Online (Sandbox Code Playgroud)

我调用时不会触发此事件处理程序.submit()。从MDN

从基于Gecko的应用程序中调用此方法时,将不会触发表单的onsubmit事件处理程序(例如,onsubmit =“ return false;”)。通常,不能保证HTML用户代理会调用它。

因此,在这种限制下,我如何以确保事件处理程序被调用的方式提交表单?

javascript

6
推荐指数
2
解决办法
5989
查看次数

Elastic beanstalk自动创建一个安全组,允许端口80上的所有流量.如何禁用此功能?

我正在Elastic Beanstalk(EB)上部署服务.创建EB环境时,它会要求您为运行该应用程序的主机选择安全组.无论您选择什么,除了生成的安全组之外,EB将始终使用您选择的安全组,该安全组允许端口80和443上的所有外部HTTP和HTTPS流量.有没有办法禁用此功能?我希望允许的流量由我选择的安全组确定.我不想允许任何外部流量.

amazon-ec2 amazon-web-services amazon-elastic-beanstalk

6
推荐指数
1
解决办法
965
查看次数

在可重试操作中发送一次电子邮件(或任何消息)且仅发送一次

我有一个程序正在向用户的信用卡收费。该卡通过第三方 API 收费。当我收到来自第 3 方 API 的响应时,我会更新用户余额的内部表示。用户的余额更新后,收据将通过电子邮件发送给用户。

在向用户的卡收费和更新其余额的内部表示之间可能会发生某些服务器错误(例如意外断电)的可能性很小。为了防止这种情况,我使整个支付过程具有幂等性,因此可以重试而无需向用户重复收费,但肯定会更新用户的内部余额。唯一的问题是发送收据。没有办法(我能想到的)使这个操作幂等。目前,我只发送一封电子邮件,说明余额更新实际上改变了任何内容,但是服务器当然可能在余额更新和发送收据之间发生故障,导致收据永远不会发送的情况。人们通常如何解决这个问题?

我将此问题标记为language-agnostic因为这似乎是发送消息的常见问题,但我正在使用 Java 和 AWS 的简单电子邮件服务来解决此问题,因此使用这些技术获得答案会很棒。

java language-agnostic email amazon-web-services

6
推荐指数
1
解决办法
751
查看次数

带有自签名证书的 GRPC ssl

我正在尝试将自签名证书与 GRPC 一起使用。我生成了证书/密钥:

openssl req -x509 -nodes -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365
Run Code Online (Sandbox Code Playgroud)

这给了我两个文件:cert.pemkey.pem.

我有一个 Kotlin GRPC 服务器,我设置如下:

val ca = classLoader.getResourceAsStream("cert.pem")
val key = classLoader.getResourceAsStream("key.pem")
ServerBuilder
    .forPort(8443)
    .useTransportSecurity(ca, key)
    .addService(...)
    .build()
    .start()
Run Code Online (Sandbox Code Playgroud)

这似乎成功启动。我有一个颤振客户端,我按以下方式设置:

final cert = await rootBundle.load('cert.pem')
final certAsList = cert.buffer
        .asUint8List(
          cert.offsetInBytes,
          cert.lengthInBytes,
        )
        .map((uint8) => uint8.toInt())
        .toList()
final channel = new ClientChannel(
      'localhost',
      port: 8443,
      options: ChannelOptions(
        credentials: ChannelCredentials.secure(certificates: certAsList),
      ),
    )
Run Code Online (Sandbox Code Playgroud)

但是,使用此通道连接到我的服务会出现以下错误:

gRPC Error (14, Error connecting: HandshakeException: Handshake …
Run Code Online (Sandbox Code Playgroud)

ssl dart kotlin grpc flutter

6
推荐指数
1
解决办法
3373
查看次数

是否可以使用包含boost :: variant的STL容器并在变体类型本身中使用相同的容器类型?

这似乎不太可能,但我想我还是会问.

我已经定义了boost::variant这样的:

typedef boost::variant<double, int, std::string> ConfigVariant;
Run Code Online (Sandbox Code Playgroud)

稍后在我的代码中我定义了std::map这样的:

std::map<std::string, ConfigVariant> my_map;
Run Code Online (Sandbox Code Playgroud)

现在我希望能够拥有std::map<std::string, ConfigVariant>内在的价值观my_map.例如,我想这样做:

my_map[key1][key2] = "hello world";
Run Code Online (Sandbox Code Playgroud)

我认为这是不可能的原因是因为看起来相应的变体定义看起来像这样:

typedef boost::variant<double, int, std::string, std::map<std::string, ConfigVariant> ConfigVariant;
Run Code Online (Sandbox Code Playgroud)

由于制作这样的类型定义是不可能的,有什么方法可以解决这个问题吗?

c++ boost stl

5
推荐指数
1
解决办法
811
查看次数

如何使用EasyMock模拟DynamoDB的ItemCollection <QueryResult>?

我有以下Java代码:

Index userNameIndex = userTable.getIndex("userNameIndex");
ItemCollection<QueryOutcome> userItems = userNameIndex.query("userName", userName);

for (Item userItem : userItems) {
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写一个单元测试,我想嘲笑ItemCollection<QueryOutcome>.问题是返回的迭代器ItemCollection<QueryOutcome>::iterator是类型IteratorSupport,它是一个包受保护的类.因此,无法模拟此迭代器的返回类型.我该怎么做?

谢谢!

java easymock amazon-web-services amazon-dynamodb

5
推荐指数
1
解决办法
3178
查看次数