我正在使用Play框架版本1.2.5 我将安全模型添加到我的应用程序中。 验证我的视图是根据用户权限隐藏一些HTML菜单。 我还将验证用户登录等(我目前关于视图的问题) 我在这个
中使用了Security类中的check方法static boolean check(String profile) {
LicenseType license = LicenseType.valueOf(profile);
User user = User.find("byEmail", connected()).first();
return user.hadLicense(license);
}
在我的模板中例如我这样做
<html><body>
#{secure.check "ADMIN"}
<a href="link-to-admin-page" >
#{/secure.check}
.... some html
#{secure.check "EDIT"}
<div>some html here </div>
#{/secure.check}
.... some html
#{secure.check "ADD"}
<div>some html here </div>
#{/secure.check}
</body></html>
我的问题是这样的。 剂量这种情况意味着,像这样的单个视图将访问数据库4次 用于通过电子邮件选择用户。 只是为了检查安全性?
谢谢你。答案 0 :(得分:1)
是的,它确实意味着每次检查都会访问数据库(虽然JPA可能会为您提供缓存条目 - 不确定是否存在)。
为避免这种情况,您可以在
中基于每个请求缓存结果request.args中
答案 1 :(得分:0)
从您提供的代码示例中,看起来用户已经登录。所以我建议您将用户许可证变量存储在会话中,然后使用静态方法进行比较。您可以将许可证同样存储在缓存(memcache)
中E.g。
static boolean check(String profile){
LicenseType license = LicenseType.valueOf(profile);
return User.hadLicense(license, connectedLicense());
}
static boolean check(String profile){
LicenseType license = LicenseType.valueOf(profile);
return User.hadLicense(license, connectedLicense());
}
注意:connectedLicense() - 是登录时用户存储的许可证。