开发Grails 3.0插件时:
例如,安全插件可以包含以下类:
User.groovy
package com.example.plugins.security
class User {
String email
String hash
Boolean enabled = true
}
SecurityService.groovy
package com.example.plugins.security
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder
class SecurityService {
def authenticate(String email, String password) {
def user = User.findByEmail(email) //instance of BookstoreUser???
def encoder = new BCryptPasswordEncoder()
return user && encoder.matches(password, user.hash) ? user : null
}
}
该应用程序将具有以下域名:
的grails-app /域/ COM /示例/书店/ BookstoreUser.groovy
package org.example.bookstore
import org.bson.types.ObjectId
import org.example.plugins.security.User
class BookstoreUser extends User {
ObjectId id
String firstName
String lastName
static mapWith = "mongo"
}
答案 0 :(得分:0)
如何定义域以便可以通过扩展域进行扩展 使用插件的应用程序?
与定义任何其他域类的方式相同。在grails-app/domain/
下声明Groovy源文件。
插件如何引用扩展类的实例?
您在问题中显示的代码可以正常工作。
package com.example.plugins.security
class SecurityService {
def disableUser(User user) { //the instance should be a BookstoreUser
user.enabled = false
user.save()
}
}
如果某个应用程序编写了一个扩展您的BookstoreUser
类的类User
,那么BookstoreUser
的实例可以传递到您的disableUser
方法中,该方法将表现为你可能期望它应该。该方法将enabled
属性设置为false
,然后保存更新的实例。