Difference between revisions of "Grails Plugins"
From Blue-IT.org Wiki
(→1. Declare mode in Config.groovy) |
(→4. Build a MultiTenat environment in BootStrap.groovy) |
||
Line 39: | Line 39: | ||
=== 4. Build a MultiTenat environment in BootStrap.groovy === | === 4. Build a MultiTenat environment in BootStrap.groovy === | ||
− | import grails.plugin.multitenant.core.util.TenantUtils | + | ''import grails.plugin.multitenant.core.util.TenantUtils'' |
− | import org.codehaus.groovy.grails.commons.ConfigurationHolder | + | ''import org.codehaus.groovy.grails.commons.ConfigurationHolder'' |
− | + | ''import tenant.DomainTenantMap'' // was created with grails create-domain-map | |
− | |||
− | |||
class BootStrap { | class BootStrap { | ||
− | |||
− | |||
− | |||
def init = { servletContext -> | def init = { servletContext -> | ||
− | def domainName = ConfigurationHolder.config.grails.tenantDomain | + | ''def domainName = ConfigurationHolder.config.grails.tenantDomain'' |
if { | if { | ||
− | DomainTenantMap.findByName(' | + | ''DomainTenantMap.findByName('myweb1')'' |
} else { | } else { | ||
− | new DomainTenantMap( name:' | + | new DomainTenantMap( name:'myweb1', |
domainName:domainName, | domainName:domainName, | ||
− | mappedTenantId:1).save(flush:true); | + | ''mappedTenantId:1'').save(flush:true); |
} | } | ||
Revision as of 08:59, 5 September 2011
All plugins can be downloaded at: http://grails.org/plugins
Contents
Multi Tenant
An introduction on the concept of multitenant can be found at:
Documentation
1. Declare mode in Config.groovy
// Multi Tenant tenant { // multiTenant is the default // do "grails create-dns-map" when changing tenantDomains // this stroes the dns/tenant mappings into the database resolver.request.dns.type = "db" }
Later on you can use tenant[dot] to refer to the TenantMap domain class (see later on).
2. Declare Tenant Class
This class should be a top level class. E.g. "Organisation" hasMany "Users".
import grails.plugin.multitenant.core.groovy.compiler.MultiTenant; @MultiTenant class Organisation { [...]
3. Create a TenantMap domain class
This is achieved by using the command
grails create-domain-map
This creates a domain class with the name DomainTenantMap.groovy.
4. Build a MultiTenat environment in BootStrap.groovy
import grails.plugin.multitenant.core.util.TenantUtils import org.codehaus.groovy.grails.commons.ConfigurationHolder import tenant.DomainTenantMap // was created with grails create-domain-map class BootStrap { def init = { servletContext -> def domainName = ConfigurationHolder.config.grails.tenantDomain if { DomainTenantMap.findByName('myweb1') } else { new DomainTenantMap( name:'myweb1', domainName:domainName, mappedTenantId:1).save(flush:true); }
Spring Security
- http://www.grails.org/plugin/spring-security-core
- http://grails.org/dist/screencasts/screencast10.mov
s2-quickstart
grails s2quickstart your.package SecUser SecRole
creates two domain classes and corresponding controllers.
Integrade domain classes
class MyDomainClass extends SecUser { [...] }
BootStrap.groovy
class BootStrap { def dpringSecurityService def init = { def userRole = SecRole.findByAuthority("ROLE_USER") ?: new SecRole(authority: "ROLE_USER").save() def adminRole = SecRole.findByAuthority("ROLE_ADMIN") ?: new SecRole(authority: "ROLE_ADMIN").save() [...] } def users = User.list() ?: [] if (!users) { def user = new User( [...] password: springSecurityService.enodePassord("myPass") enabled = true ) } SecUserSecRole.create user, userRole }
Annotate the controller actions
import grails.plugins.springsecurity.Secured class DomainClassController { @Secured(['ROLE_USER']) def myAction = { [...] } }
Create a currentUser() method in the controller
class DomainClassController { @Secured(['ROLE_USER']) def myAction = { def currentUser = currentuser(); [...] } [...] private currentUser() { User.get(springSecurityService.principal.id)