2017-02-17 3 views
0

Я имею URLs как http://192.168.0.226:8080/crm/contacts/contactProfile/5Как заблокировать доступ к определенной URL в Грааль

Компания может создать учетную запись и затем создать контакты. Он генерирует идентификатор контакта, который используется в URL-адресе. И любая компания может получить доступ к контактам другой компании просто путем замены идентификатора на случайное число, как

http://192.168.0.226:8080/crm/contacts/contactProfile/675

Как предотвратить одну компанию доступа к контактам другой компании. А также, если идентификатор отсутствует в базе данных, он будет показывать ошибку. Как я могу перенаправить на страницу 404, если идентификатор отсутствует.

Я использую grails 2.2.1 с весной безопасности. Я пытался его решить по запросам как

def structureMap2 = Requestmap.findByUrl("contacts/contactProfile/*") ?: new Requestmap(url: "contacts/contactProfile/*",configAttribute: "ROLE_COMPANY").save(failOnError:true) 

но это не сработало.

Если мне нужно реструктурировать URL-адрес, как мне это сделать. Или есть другой способ. Спасибо.

ответ

0

Ну, я бы сделал это в Contacts/contactProfile контроллер. Проверьте, имеет ли пользователь доступ к нему, чтобы открыть его. Если да, то вы отображения страницы, если нет, то вернуть в flash.error (или любой другой) и перенаправить на 404. Что-то вроде этого:

def contactProfile() { 
    def user = = springSecurityService.currentUser 
    def contact = Contact.get(params.id) 
    if (!contact) { 
     flash.error = "There is no such contact!" 
     redirect(controller: "errors", action: "404") 
    } else if (contact.company.id == user.company.id) { 
     //create the stuff 
     [contact: contact] //render the page 
    } else { 
     flash.error = "You are not authorised to view this contact!" 
     redirect(controller: "errors", action: "404") 
    } 
} 

Это написано в предположении, что Вы имеете компании назначены на пользователь и контакт также имеют компанию, для которой она создана.

+0

спасибо. Он работал очень хорошо. –

Смежные вопросы