Я использую Liferay 7.0 GA5 .Я создал пользовательские роли.
Liferay позволяет пользователю просматривать макет, если у него есть одна из пользовательских ролей.Я должен настроить это поведение, чтобы пользователь мог посещать страницу, только если у него есть определенные роли.
Кроме того, это должно применяться к результатам поиска.
На данный момент я делаю какниже
@Component(
immediate = true,
property = {
"key=servlet.service.events.pre",
"service.ranking:Integer=1000"
},
service = LifecycleAction.class
)
public class CustomPreAction implements LifecycleAction {
private static final Log LOG = LogFactoryUtil.getLog(CustomPreAction.class);
@Override
public void processLifecycleEvent(LifecycleEvent lifecycleEvent) throws ActionException {
LOG.info("Custom Service : pre-action");
HttpServletRequest httpServletRequest = lifecycleEvent.getRequest();
HttpServletResponse httpServletResponse = lifecycleEvent.getResponse();
User currentUser = getUser(httpServletRequest);
if(Validator.isNotNull(currentUser) && !hasVewPermission(currentUser, httpServletRequest)) {
LOG.warn("\n User don't have appropriate permission to view requested page.\n");
System.out.println("Redirecting user for testing");
try {
httpServletResponse.sendRedirect("/dashboard");
} catch (IOException e) {
e.printStackTrace();
}
}
}
private User getUser(HttpServletRequest httpServletRequest) {
User currentUser = null;
try {
currentUser = PortalUtil.getUser(httpServletRequest);
} catch (PortalException e) {
e.printStackTrace();
}
return currentUser;
}
private boolean hasVewPermission(User currentUser, HttpServletRequest httpServletRequest) {
boolean hasPermission = false;
/*
* My custom logic
* ...
*/
return hasPermission;
}
}