acegiプラグインの動作確認用にアプリを作ります。

まずは create-app します.

user01@ubuntu:~/repos$ grails create-app test002

Welcome to Grails 1.0.4 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: /home/user01/grails		
		
Base Directory: /home/user01/repos
Note: No plugin scripts found
Running script /home/user01/grails/scripts/CreateApp.groovy
Environment set to development
    [mkdir] Created dir: /home/user01/repos/test002/src
    [mkdir] Created dir: /home/user01/repos/test002/src/java
    [mkdir] Created dir: /home/user01/repos/test002/src/groovy
    [mkdir] Created dir: /home/user01/repos/test002/grails-app
    [mkdir] Created dir: /home/user01/repos/test002/grails-app/controllers
    [mkdir] Created dir: /home/user01/repos/test002/grails-app/services
    [mkdir] Created dir: /home/user01/repos/test002/grails-app/domain
    [mkdir] Created dir: /home/user01/repos/test002/grails-app/taglib
    [mkdir] Created dir: /home/user01/repos/test002/grails-app/utils
    [mkdir] Created dir: /home/user01/repos/test002/grails-app/views
    [mkdir] Created dir: /home/user01/repos/test002/grails-app/views/layouts
    [mkdir] Created dir: /home/user01/repos/test002/grails-app/i18n
    [mkdir] Created dir: /home/user01/repos/test002/grails-app/conf
    [mkdir] Created dir: /home/user01/repos/test002/test
    [mkdir] Created dir: /home/user01/repos/test002/test/unit
    [mkdir] Created dir: /home/user01/repos/test002/test/integration
    [mkdir] Created dir: /home/user01/repos/test002/scripts
    [mkdir] Created dir: /home/user01/repos/test002/web-app
    [mkdir] Created dir: /home/user01/repos/test002/web-app/js
    [mkdir] Created dir: /home/user01/repos/test002/web-app/css
    [mkdir] Created dir: /home/user01/repos/test002/web-app/images
    [mkdir] Created dir: /home/user01/repos/test002/web-app/META-INF
    [mkdir] Created dir: /home/user01/repos/test002/lib
    [mkdir] Created dir: /home/user01/repos/test002/grails-app/conf/spring
    [mkdir] Created dir: /home/user01/repos/test002/grails-app/conf/hibernate
[propertyfile] Creating new property file: /home/user01/repos/test002/application.properties
     [copy] Copying 2 files to /home/user01/repos/test002
     [copy] Copied 1 empty directory to 1 empty directory under /home/user01/repos/test002
     [copy] Copying 2 files to /home/user01/repos/test002/web-app/WEB-INF
     [copy] Copying 5 files to /home/user01/repos/test002/web-app/WEB-INF/tld
     [copy] Copying 28 files to /home/user01/repos/test002/web-app
     [copy] Copying 18 files to /home/user01/repos/test002/grails-app
     [copy] Copying 1 file to /home/user01/repos/test002
     [copy] Copying 1 file to /home/user01/repos/test002
     [copy] Copying 1 file to /home/user01/repos/test002
     [copy] Copying 1 file to /home/user01/repos/test002
[propertyfile] Updating property file: /home/user01/repos/test002/application.properties
Created Grails Application at /home/user01/repos/test002
user01@ubuntu:~/repos$ 

作成したディレクトリに移動して install-plugin します.

user01@ubuntu:~/repos/test002$ grails install-plugin acegi

Welcome to Grails 1.0.4 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: /home/user01/grails		
		
Base Directory: /home/user01/repos/test002
Note: No plugin scripts found
Running script /home/user01/grails/scripts/InstallPlugin.groovy
Environment set to development
    [mkdir] Created dir: /home/user01/repos/test002/plugins
     [copy] Copying 1 file to /home/user01/repos/test002/plugins
    [mkdir] Created dir: /home/user01/repos/test002/plugins/acegi-0.5.1
    [unzip] Expanding: /home/user01/repos/test002/plugins/grails-acegi-0.5.1.zip into /home/user01/repos/test002/plugins/acegi-0.5.1
Compiling plugin acegi-0.5.1 ... ...
  [groovyc] Compiling 6 source files to /home/user01/.grails/1.0.4/projects/test002/classes
Loading with installed plug-ins: ["acegi"] ...
Executing acegi-0.5.1 plugin post-install script ...
Plugin acegi-0.5.1 installed
Plug-in provides the following new scripts:
------------------------------------------
grails create-auth-domains
grails generate-manager
grails generate-registration

User,Role,Requestmapの3つのドメインクラスを作ります.

user01@ubuntu:~/repos/test002$ grails create-auth-domains User Role Requestmap

Welcome to Grails 1.0.4 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: /home/user01/grails		
		
Base Directory: /home/user01/repos/test002
Running script /home/user01/repos/test002/plugins/acegi-0.5.1/scripts/CreateAuthDomains.groovy
Environment set to development
Login user domain class: User
Authority domain class: Role
Requestmap domain class: Requestmap
file generated at /home/user01/repos/test002/grails-app/domain/User.groovy
file generated at /home/user01/repos/test002/grails-app/domain/Role.groovy
file generated at /home/user01/repos/test002/grails-app/domain/Requestmap.groovy
file generated at /home/user01/repos/test002/grails-app/conf/SecurityConfig.groovy
copying login.gsp and Login/Logout Controller example. 
    [mkdir] Created dir: /home/user01/repos/test002/grails-app/views/login
     [copy] Copying 1 file to /home/user01/repos/test002/grails-app/views/login
     [copy] Copying 1 file to /home/user01/repos/test002/grails-app/views/login
     [copy] Copying 1 file to /home/user01/repos/test002/grails-app/views/login
     [copy] Copying 1 file to /home/user01/repos/test002/grails-app/controllers
     [copy] Copying 1 file to /home/user01/repos/test002/grails-app/controllers
user01@ubuntu:~/repos/test002$ 

grails generate-manager します.

user01@ubuntu:~/repos/test002$ grails generate-manager

Welcome to Grails 1.0.4 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: /home/user01/grails		
		
Base Directory: /home/user01/repos/test002
Running script /home/user01/repos/test002/plugins/acegi-0.5.1/scripts/GenerateManager.groovy
Environment set to development
Login user domain class: User
Authority domain class: Role
Request Map domain class: Requestmap
generating files for User .......
generating file /home/user01/repos/test002/grails-app/controllers/UserController.groovy
file generated at /home/user01/repos/test002/grails-app/controllers/UserController.groovy
generating view files - /home/user01/repos/test002/grails-app/views/user/* 
    [mkdir] Created dir: /home/user01/repos/test002/grails-app/views/user
file generated at /home/user01/repos/test002/grails-app/views/user/list.gsp
file generated at /home/user01/repos/test002/grails-app/views/user/edit.gsp
file generated at /home/user01/repos/test002/grails-app/views/user/create.gsp
file generated at /home/user01/repos/test002/grails-app/views/user/show.gsp
generating files for Role .......
generating file /home/user01/repos/test002/grails-app/controllers/RoleController.groovy
file generated at /home/user01/repos/test002/grails-app/controllers/RoleController.groovy
generating view files - /home/user01/repos/test002/grails-app/views/role/* 
    [mkdir] Created dir: /home/user01/repos/test002/grails-app/views/role
file generated at /home/user01/repos/test002/grails-app/views/role/list.gsp
file generated at /home/user01/repos/test002/grails-app/views/role/edit.gsp
file generated at /home/user01/repos/test002/grails-app/views/role/create.gsp
file generated at /home/user01/repos/test002/grails-app/views/role/show.gsp
generating files for Requestmap .......
generating file /home/user01/repos/test002/grails-app/controllers/RequestmapController.groovy
file generated at /home/user01/repos/test002/grails-app/controllers/RequestmapController.groovy
generating view files - /home/user01/repos/test002/grails-app/views/requestmap/* 
    [mkdir] Created dir: /home/user01/repos/test002/grails-app/views/requestmap
file generated at /home/user01/repos/test002/grails-app/views/requestmap/list.gsp
file generated at /home/user01/repos/test002/grails-app/views/requestmap/edit.gsp
file generated at /home/user01/repos/test002/grails-app/views/requestmap/create.gsp
file generated at /home/user01/repos/test002/grails-app/views/requestmap/show.gsp
user01@ubuntu:~/repos/test002$

grails create-controller Secure します.

user01@ubuntu:~/repos/test002$ grails create-controller Secure

Welcome to Grails 1.0.4 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: /home/user01/grails		
		
Base Directory: /home/user01/repos/test002
Running script /home/user01/grails/scripts/CreateController.groovy
Environment set to development
     [copy] Copying 1 file to /home/user01/repos/test002/grails-app/controllers
Created Controller for Secure
    [mkdir] Created dir: /home/user01/repos/test002/grails-app/views/secure
     [copy] Copying 1 file to /home/user01/repos/test002/test/integration
Created ControllerTests for Secure
user01@ubuntu:~/repos/test002$

Secureコントローラで適当な出力するようにします.

class SecureController {
    def index = { 
        render 'Secure access only';
    }
}

grails run-app します.

user01@ubuntu:~/repos/test002$ grails run-app

Welcome to Grails 1.0.4 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: /home/user01/grails		
		
Base Directory: /home/user01/repos/test002
Running script /home/user01/grails/scripts/RunApp.groovy
Environment set to development
  [groovyc] Compiling 11 source files to /home/user01/.grails/1.0.4/projects/test002/classes
    [mkdir] Created dir: /home/user01/.grails/1.0.4/projects/test002/resources/grails-app/i18n
[native2ascii] Converting 11 files from /home/user01/repos/test002/grails-app/i18n to /home/user01/.grails/1.0.4/projects/test002/resources/grails-app/i18n
     [copy] Copying 1 file to /home/user01/.grails/1.0.4/projects/test002/classes
     [copy] Copying 1 file to /home/user01/.grails/1.0.4/projects/test002/resources
Loading with installed plug-ins: ["acegi"] ...
     [copy] Copying 1 file to /home/user01/.grails/1.0.4/projects/test002
Running Grails application..
2009-04-09 21:40:31.484::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog
2009-04-09 21:40:32.609::INFO:  jetty-6.1.12
2009-04-09 21:40:32.766::INFO:  No Transaction manager found - if your webapp requires one, please configure one.
2009-04-09 21:40:32.079:/test002:INFO:  Set web app root system property: 'test002-development-0.1' = [/home/user01/repos/test002/web-app]
2009-04-09 21:40:32.079:/test002:INFO:  Initializing log4j from [file:/home/user01/.grails/1.0.4/projects/test002/resources/log4j.properties]
2009-04-09 21:40:32.133:/test002:INFO:  Initializing Spring root WebApplicationContext
loading security config ...
[0] spring.GrailsWebApplicationContext Refreshing org.codehaus.groovy.grails.commons.spring.GrailsWebApplicationContext@4a5320: display name [org.codehaus.groovy.grails.commons.spring.GrailsWebApplicationContext@4a5320]; startup date [Thu Apr 09 21:40:34 JST 2009]; parent: org.springframework.web.context.support.XmlWebApplicationContext@1ed2061
[0] spring.GrailsWebApplicationContext Bean factory for application context [org.codehaus.groovy.grails.commons.spring.GrailsWebApplicationContext@4a5320]: org.springframework.beans.factory.support.DefaultListableBeanFactory@a8a271
2009-04-09 21:40:37.674:/test002:INFO:  Initializing Spring FrameworkServlet 'grails'
2009-04-09 21:40:37.808::INFO:  Started SelectChannelConnector@0.0.0.0:8080
Server running. Browse to http://localhost:8080/test002

http://localhost:8080/test002 にアクセスするとこんな感じに。

SecureControllerをクリックすると、普通にアクセスできます。

普通にアクセスされては困るので、RoleとUserとRequestmapをそれぞれ作成します。



その状態でSecureControllerにアクセスすると…

あれ、アクセスできない…?

Roleの名前に"ROLE"が含まれていないと、紐づけできないみたいです。
UserController.groovy

	private void addRoles(person) {
		for (String key in params.keySet()) {
			if (key.contains('ROLE') && 'on' == params.get(key)) {
				Role.findByAuthority(key).addToPeople(person)
			}
		}
	}

Roleに"ROLE"を含めると、ちゃんと紐づけできました。