@Override public void check( PermissionChecker permissionChecker, T model, String actionId) throws PortalException { if (!contains(permissionChecker, model, actionId)) { throw new PrincipalException.MustHavePermission( permissionChecker, _modelName, _modelResourcePermissionDefinition.getPrimaryKey(model), actionId); } }
@Override public boolean contains( PermissionChecker permissionChecker, T model, String actionId) throws PortalException { Map<Object, Object> permissionChecksMap = permissionChecker.getPermissionChecksMap(); PermissionCacheKey permissionCacheKey = new PermissionCacheKey( _modelName, _modelResourcePermissionDefinition.getPrimaryKey(model), actionId); Boolean contains = (Boolean)permissionChecksMap.get(permissionCacheKey); if (contains == null) { contains = _contains(permissionChecker, model, actionId); permissionChecksMap.put(permissionCacheKey, contains); } return contains; }
private boolean _contains( PermissionChecker permissionChecker, T model, String actionId) throws PortalException { actionId = _modelResourcePermissionDefinition.mapActionId(actionId); for (ModelResourcePermissionLogic<T> modelResourcePermissionLogic : _modelResourcePermissionLogics) { Boolean contains = modelResourcePermissionLogic.contains( permissionChecker, _modelName, model, actionId); if (contains != null) { return contains; } } String primKey = String.valueOf( _modelResourcePermissionDefinition.getPrimaryKey(model)); if (permissionChecker.hasOwnerPermission( model.getCompanyId(), _modelName, primKey, model.getUserId(), actionId)) { return true; } return permissionChecker.hasPermission( model.getGroupId(), _modelName, primKey, actionId); }