В Play 1.2 есть ли способ защитить контроллер, предоставляемый модулем, без редактирования источника модуля? - PullRequest
1 голос
/ 11 ноября 2011

Я хотел бы использовать контроллер, предоставленный в модуле, но контроллер не защищен. Я не хочу редактировать исходный код модуля, так как это приведет к накладным расходам на обслуживание. Предлагает ли Play какое-либо решение этой проблемы?

Ответы [ 3 ]

2 голосов
/ 18 ноября 2011

С Secure-Module вы не можете этого сделать. Я работаю над модулем для обеспечения такой функциональности, но он еще не закончен, потому что мне нужно написать больше тестов, часть управления пользователями и некоторые теги. Однако, если вы заинтересованы, я могу отправить вам ссылку на хранилище. Это должно соответствовать вашим требованиям.

Deadbolt , похоже, тоже не работает.

1 голос
/ 24 ноября 2011

Подход, основанный на грубой силе, заключается в том, чтобы не включать маршруты модуля (или, по крайней мере, не разрешать прямой доступ к контроллерам, которые вы хотите защитить), а вместо этого разрешать доступ к модулю только через один из ваших собственных контроллеров. , Контроль доступа может быть применен в вашем собственном контроллере.

0 голосов
/ 28 января 2015

Вы должны переопределить контроллер модуля своим собственным контроллером, который делегирует вызовы методов контроллера с вашими методами. Предположительно, все, что вам нужно сделать, - это создать контроллер, расширяющий контроллер модуля, который вы хотите защитить, добавить к нему аннотации @With (Secure.class) и @Check и изменить маршруты так, чтобы они указывали на этот новый контроллер вместо того контроллера контроллера, на котором он находится. продолжается.

Посмотрите на пример модуля CRUD - https://www.playframework.com/documentation/1.2.2/guide8

У них есть контроллер сообщений, расширяющий CRUD, защищенный модулем Secure. Контроллер Posts не имеет собственных методов, но эффективно наследует методы CRUD (с точки зрения роутера Play):

package controllers;

import play.*;
import play.mvc.*;

@With(Secure.class)
public class Posts extends CRUD {    
}
...