2016-07-28 5 views
-1

У меня есть домен:проверка Spring Security, если пользователь имеет RoleGroup

пользователя hasOne RoleGroup hasMany Роль

  • Exemples:

RoleGroup: Admin, Профессиональный, Клиент, ...

Роль: ROLE_ACTION_1, ROLE_ACTION_2 ...

Как я могу проверить, если пользователь имеет RoleGroup с аннотациями @Secured?

Мне нужно проверить, содержит ли пользователь все роли RoleGroup?

Класс пользователя:

class User implements Serializable { 

    private static final long serialVersionUID = 1 

    static constraints = { 
     password blank: false, password: true 
     username blank: false, unique: true 
    } 

    static mapping = { 
     password column: '`password`' 
     version false 
     table schema: "CA" 
    } 

    static transients = ['springSecurityService'] 

    transient springSecurityService 

    transient boolean enabled = true 
    transient boolean accountExpired 
    transient boolean accountLocked 
    transient boolean passwordExpired 

    String username 
    String password 
    RoleGroup profile 

    Set<RoleGroup> getAuthorities() { 
     [profile] 
    } 
} 

RoleGroup класс:

class RoleGroup implements Serializable { 

    private static final long serialVersionUID = 1 

    String name  

    Set<Role> getAuthorities() { 
     RoleGroupRole.findAllByRoleGroup (this)*.role 
    }  
} 
+0

Вы говорите, если пружина поддерживает ролевую группу, которая представляет собой список ролей Не уверен Абт что?. Я бы сделал проект базы данных для ролей, расширяющих роли или группу ролей, а затем относился к ним как к весне. Spring поддерживает список ролей -> @Secured ({«Admin», «Professional»}) – surya

+0

Вставьте свой класс и пример класса пользователя в пользовательский экземпляр класса пользователя. –

+0

Я вставляю свои классы –

ответ

1

Я думаю, что вы не полностью осознан пружинный безопасности.

При использовании аннотации - первая аннотация должна быть включена в конфигурации - это по умолчанию.

Вы закрепите либо весь контроллер или действие контроллера, используя что-то вроде этого

@Secured(['ROLE_ADMIN', 'ROLE_USER']) 

Это не имеет никакого способа разработки все то, что пользователь имеет в качестве групп власти.

Хотя в коде вы вставили в классе RoleGroup у вас есть:

getAuthorities() 

Я подправили свой класс домена пользователя и добавил следующее:

Set<RoleGroup> getAuthorities() { 
     UserRoleGroup.findAllByUser(this)*.roleGroup 
    } 
    Set<RoleGroup> getAuthoritiesNames() { 
     UserRoleGroup.findAllByUser(this)*.roleGroup?.name 
    } 

Так что, когда у меня есть пользователь

ie User user = User.get (1L)

def authorities = user.getAuthorities() 
println "user ${user} has ${authorities}" 

, который представляет собой список, содержащий все органы

if (authorities.contains('ROLE_USER')) { 
println "WOOHOO" 
} 

С пружинным безопасности вы можете также использовать его в GSPS:

<sec:ifAllGranted roles="ROLE_ADMIN"> 
show something 
</sec:ifAllGranted> 

Итак, вернемся к вашему вопросу:

У вас есть:

Set<RoleGroup> getAuthorities() { 
     [profile] 
    } 

Это что-то, что у вас есть в пу т на месте?

С, где:

class RoleGroup implements Serializable { 

    private static final long serialVersionUID = 1 

    String name  

    Set<Role> getAuthorities() { 
     RoleGroupRole.findAllByRoleGroup (this)*.role 
    }  
} 

Это должно перечислить вам все органы

User user = User.get(1L) 
def authorities = user?.profile?.getAuthorities() 
Смежные вопросы