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) } } }