generate controller
我每次都开始使用和插入必要的代码。但是,这通常是我目前对这些控制器所做的唯一更改,并且每次都是相同的更改。一定有一种更优雅的方式,感觉更“Grailly”。
无论您做什么,都不要到处复制/粘贴代码。这与 Grails 无关。只是不要这样做。每次你这样做,上帝都会杀死一只小猫。
如果不了解您在做什么的更多细节,很难说,但我可以看到一些选项
1)如果您需要将实体保留在数据库之外,一旦加载它们,您就可以将它们与用户一起放入会话中。您可以在基本控制器类中编写代码来访问会话以检索“当前”模型实例,然后让所有控制器扩展该控制器。或者您可以选择将会话访问代码放入某种帮助程序中。
2) 1 的问题是它不能很好地扩展。如果您有很多需要保留的物品,我不会将它们放在会话中。在这种情况下,您需要查看您的设计。您真的需要将实例保留在会话中吗?如果您正在检查用户是否拥有正在修改的对象,则可以将该检查放入服务方法中。因此,如果您检查编辑,服务应该做的第一件事是检查用户是否 a) 具有修改实例的必要角色(如果您使用安全性),并且 b) 检查用户是否拥有该实例(或以其他方式可以修改)。
根据评论进行编辑
首先,如果您使用的是 Spring Security 插件,您可以轻松获取当前用户。
如果你走这条路,你需要将安全服务注入你想要获取用户的每个控制器/服务中。
其次,如果您不是,您应该编写一个SessionHelper
带有静态方法的类,以帮助将所有会话操作代码保存在一个地方(Spring Security 也有这样的助手)。如果您这样做,则可以随时随地获取当前用户。
最后,您应该让用户进入您的服务层。服务应该对持久实例进行所有操作。如果用户只能附加到他们自己的项目,这也有助于以某种方式为特定事物获取错误用户而出现的错误。