diff --git a/src/java/com/threerings/whirled/spot/server/SpotProvider.java b/src/java/com/threerings/whirled/spot/server/SpotProvider.java index 024e3b30c..757b52705 100644 --- a/src/java/com/threerings/whirled/spot/server/SpotProvider.java +++ b/src/java/com/threerings/whirled/spot/server/SpotProvider.java @@ -1,5 +1,5 @@ // -// $Id: SpotProvider.java,v 1.15 2003/02/12 07:23:31 mdb Exp $ +// $Id: SpotProvider.java,v 1.16 2003/03/17 19:34:26 mdb Exp $ package com.threerings.whirled.spot.server; @@ -77,6 +77,12 @@ public class SpotProvider SpotScene rss = (SpotScene)smgr.getScene(); final Portal fdest = rss.getPortal(portalId); + // give the source scene manager a chance to do access control + String errmsg = smgr.mayTraversePortal(fsource, fdest); + if (errmsg != null) { + throw new InvocationException(errmsg); + } + // make sure this portal has valid info if (fdest == null || !fdest.isValid()) { Log.warning("Traverse portal with invalid portal " + diff --git a/src/java/com/threerings/whirled/spot/server/SpotSceneManager.java b/src/java/com/threerings/whirled/spot/server/SpotSceneManager.java index f9fbab65b..c95b0f4c9 100644 --- a/src/java/com/threerings/whirled/spot/server/SpotSceneManager.java +++ b/src/java/com/threerings/whirled/spot/server/SpotSceneManager.java @@ -1,5 +1,5 @@ // -// $Id: SpotSceneManager.java,v 1.27 2003/02/14 21:34:26 mdb Exp $ +// $Id: SpotSceneManager.java,v 1.28 2003/03/17 19:34:26 mdb Exp $ package com.threerings.whirled.spot.server; @@ -82,6 +82,18 @@ public class SpotSceneManager extends SceneManager _enterers.remove(body.getOid()); } + /** + * This is called when a user requests to traverse a portal from this + * scene to another scene. The manager may return an error code string + * that will be reported back to the caller explaining the failure or + * null indicating that it is OK for the caller to + * traverse the portal. + */ + public String mayTraversePortal (BodyObject body, Portal portal) + { + return null; + } + // documentation inherited protected void didStartup () {