2015-07-13 2 views
0

Я хочу создать специальный обработчик разрешений, используя плагин весны весны Grails.grails Весенняя безопасность пользовательское разрешение в контроллере

Представьте, что у меня есть класс пользователя и класс компании с ассоциацией «многие-ко-многим».

Я хочу только разрешить пользователям вызывать метод, называемый «удалить компанию», когда они принадлежат компании. Пример:

class User { 

static hasMany= [companies:Company] 
static belongsTo = [Company] 

} 

class Company { 

static hasMany = [users:User] 

} 

действия контроллера выглядит как следующее:

def deleteCompany(Long id) { 

} 

Я только хочу, чтобы пользователи могли вызвать метод, которые являются частью компании. Поэтому, когда

assert Company.get(id}.users.find { it == currentUser } 

Это просто упрощенный пример. Фактическая структура намного сложнее. Вот почему я хочу использовать силу весенней безопасности для этого.

Я уже играл с весны безопасности ACL, но это, кажется, что я могу использовать только пользовательские разрешения в сфере услуг, но не в контроллерах

ответ

0

Вы можете использовать beforeInterceptor в контроллере:

def springSecurityService 
def beforeInterceptor=[action:this.&auth] 
private auth = { 
    def toBeCheckedId=params.id 
    if(toBeCheckedId 
      && Company.get(toBeCheckedId}.users.find { it == springSecurityService.currentUser }){ 
      redirect action:someHandlingAction 
      return false 
     } 
    } 
} 
Смежные вопросы