Question

J'ai ce bloc de actionscript code qui est exécuté quand un login est appempted. Je l'essaie de recharger un ensemble de rôles pour un utilisateur. J'ai ajouté un gestionnaire de résultats de la méthode 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);
}

mais je continue à obtenir cette erreur. Sur la base GraniteDS docs la fonction ne devrait pas prendre un seul argument.

[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]
Était-ce utile?

La solution

Nous utilisons la fonction ifAnyGranted sur l'identité de faire quelque chose de similaire, et notre gestionnaire de résultats a 2 arguments: le TideResultEvent, et une chaîne contenant le rôle. Essayez de changer la signature de la fonction permissionResult à:

private function permissionResult(event:TideResultEvent, role:String):void
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top