0

我正在使用播放框架版本 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 次以通过电子邮件选择用户。只是为了检查安全?

谢谢你 。

4

2 回答 2

1

是的,这确实意味着每次检查都会访问数据库(尽管 JPA 可能会给您一个缓存条目 - 不确定那里)。

为避免这种情况,您可以在每个请求的基础上缓存结果

请求参数

于 2013-05-06T06:05:11.353 回答
0

从您提供的代码示例中,用户似乎已经登录。所以我建议您将用户许可证变量存储在会话中,然后使用静态方法进行比较。您同样可以将许可证存储在缓存中(memcache)

例如

static boolean check(String profile){   
        LicenseType license = LicenseType.valueOf(profile);       
        return User.hadLicense(license, connectedLicense());  
   }

注意:connectedLicense() - 是登录时用户存储的许可证。

于 2013-06-17T20:08:21.290 回答