OK. посмотрим ...
в самом начале опечатка:
"Admin".isEmpty()
всегда будет ложным ... и я полагаю, вы не определили роль "ложного" ...
И вы ищете "Администратор", но создаете "Администратор" ...
Do
adminRole.save(flush:true, failOnError:true)
вместо adminRole.save()
. Это гарантирует, что объект действительно сохранен.
Роль Administrator
уже имеет все разрешения ("*:*"
), а "admin"
не является типичным разрешением Широ, поэтому вы можете оставить эту строку ... (adminRole.addToPermissions("admin")
)
Если вы делаете
user.addToRoles(adminRole)
вам не нужно добавлять разрешение "*:*"
. Роли уже достаточно.
Я сейчас создал тестовый проект, установил shiro, сделал create-auth-controller
, create-wildcard-realm
и create-filters ShiroSecurity
.
Активируйте ведение журнала для BootStrap и Shiro-Realm, добавив следующие две строки в конфигурацию log4j в Config.groovy:
debug 'grails.app.conf.BootStrap'
debug 'grails.app.realm'
Вот мой BootStrap.groovy: (интересная часть)
def init = { servletContext ->
def adminRole
if(ShiroRole.findByName("Administrator")==null){
adminRole = new ShiroRole(name: "Administrator")
adminRole.addToPermissions("*:*")
adminRole.save(flush:true, failOnError:true)
log.debug adminRole.dump()
}
println ShiroUser.findAllByUsername("user").dump()
log.debug "="*80
if (ShiroUser.findAllByUsername("user").isEmpty()) {
def user = new ShiroUser(username: "user", passwordHash: new Sha256Hash("pass").toHex())
user.addToRoles(adminRole)
user.save(flush:true, failOnError:true)
log.debug user.dump()
}
if (ShiroUser.findAllByUsername("Guest").isEmpty()) {
def user = new ShiroUser(username: "Guest", passwordHash: new Sha256Hash("pass").toHex())
user.addToPermissions("inventory:*")
user.save(flush:true, failOnError:true)
log.debug user.dump()
}
}
и мои ShiroSecurityFilters.groovy:
def filters = {
all(controller:'*', action:'*') {
before = {
// Ignore direct views (e.g. the default main index page).
if (!controllerName) return true
// Access control by convention.
accessControl()
}
}
}
и это работает ...
Как видите, мои SecurityFilters основаны на контроллере и действиях ... только мои предпочтения ...
Но я думаю, что ваша проблема была основана только на неправильной загрузке. Ведение журнала очень полезно, когда вы работаете с shiro ...