Pregunta

Tengo este bloque de código de ActionScript que se ejecuta cuando se muestra un inicio de sesión. Estoy tratando de recargar un conjunto de roles para el usuario. He agregado un controlador de resultados al método HasRole ()

[Observer("loginAttempted")]
public function loginAttempted():void {
    identity.isLoggedIn(isLoggedInResult);

    trace(identity.loggedIn+" "+identity.username);
    var perms:Array = Permission.constants;
    var i:int
    trace("Load permissions");
    for(i=0;i<perms.length;i++)
    {
        var p:Permission = perms[i];
        var res = identity.hasRole(p.name,permissionResult);
        if(res == true)
        {
            p.allowed = res;
        }
        trace(i+" "+p.name +" "+p.allowed+" "+res);
    }
}

private function permissionResult(event:TideResultEvent):void {
    trace("permissionResult "+event.result);
}

Pero sigo recibiendo este error. Basado en el Graniteds Docs La función solo debe tomar un solo argumento.

[Fault] exception, information=ArgumentError: Error #1063:
Argument count mismatch on Main/permissionResult(). Expected 1, got 2.
at TideRoleResponder/result()[C:\workspace\graniteds\as3\framework\org\granite\tide\ejb\Identity.as:201]
at org.granite.tide::Tide/result()[C:\workspace\graniteds\as3\framework\org\granite\tide\Tide.as:1831]
at org.granite.tide.rpc::ComponentResponder/result()[C:\workspace\graniteds\as3\framework\org\granite\tide\rpc\ComponentResponder.as:65]
at mx.rpc::AsyncToken/http://www.adobe.com/2006/flex/mx/internal::applyResult()[C:\autobuild\3.5.0\frameworks\projects\rpc\src\mx\rpc\AsyncToken.as:199]
at mx.rpc.events::ResultEvent/http://www.adobe.com/2006/flex/mx/internal::callTokenResponders()[C:\autobuild\3.5.0\frameworks\projects\rpc\src\mx\rpc\events\ResultEvent.as:172]
at mx.rpc::AbstractOperation/http://www.adobe.com/2006/flex/mx/internal::dispatchRpcEvent()[C:\autobuild\3.5.0\frameworks\projects\rpc\src\mx\rpc\AbstractOperation.as:199]
at org.granite.tide.rpc::TideOperation/http://www.adobe.com/2006/flex/mx/internal::dispatchRpcEvent()[C:\workspace\graniteds\as3\framework\org\granite\tide\rpc\TideOperation.as:73]
at mx.rpc::AbstractInvoker/http://www.adobe.com/2006/flex/mx/internal::resultHandler()[C:\autobuild\3.5.0\frameworks\projects\rpc\src\mx\rpc\AbstractInvoker.as:263]
at mx.rpc::Responder/result()[C:\autobuild\3.5.0\frameworks\projects\rpc\src\mx\rpc\Responder.as:46]
at mx.rpc::AsyncRequest/acknowledge()[C:\autobuild\3.5.0\frameworks\projects\rpc\src\mx\rpc\AsyncRequest.as:74]
at NetConnectionMessageResponder/resultHandler()[C:\autobuild\3.5.0\frameworks\projects\rpc\src\mx\messaging\channels\NetConnectionChannel.as:524]
at mx.messaging::MessageResponder/result()[C:\autobuild\3.5.0\frameworks\projects\rpc\src\mx\messaging\MessageResponder.as:199]
¿Fue útil?

Solución

Estamos utilizando la función IfAnygranted en la identidad para hacer algo similar, y nuestro controlador de resultados tiene 2 argumentos: el TiderSultEvent y una cadena que contiene el rol. Intente cambiar la firma de la función de permiso a:

private function permissionResult(event:TideResultEvent, role:String):void
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top