-1

在开发 Grails 3.0 插件时:

  1. 应该如何定义域,以便应用程序可以使用插件对其进行扩展?
  2. 插件如何引用扩展类的实例?

例如,安全插件可以具有以下类:

用户.groovy

package com.example.plugins.security

class User {

   String  email
   String  hash
   Boolean enabled = true

}

安全服务.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/domain/com/example/bookstore/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"

}

其余代码位于:
https ://github.com/center-key/bookstore

4

1 回答 1

0

应该如何定义域,以便应用程序可以使用插件对其进行扩展?

与定义任何其他域类的方式相同。在grails-app/domain/.

插件如何引用扩展类的实例?

您在问题中显示的代码可以正常工作。

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,然后保存更新的实例。

于 2015-06-22T01:55:18.630 回答