choise
choise

Reputation: 25244

check for extended permissions with new facebook javascript sdk

is there a way to check in my application (canvas) if the user has extended permission (for example "stream.publish")?

i only can find a solution for the old sdk.

thanks!

Upvotes: 47

Views: 26027

Answers (6)

Matt Montag
Matt Montag

Reputation: 7481

You can also get permissions back from FB.login:

FB.login(function(response) {
  // handle the response
}, {
  scope: 'publish_actions', 
  return_scopes: true
});

See https://developers.facebook.com/docs/reference/javascript/FB.login/v2.1#options

Upvotes: 1

crowder
crowder

Reputation: 11

The responses here that use FB.Data.query are to be avoided as this point, as Facebook has deprecated FB.Data.query entirely. The FB.api(/me/permissions ...) solution seems best.

Upvotes: 1

choise
choise

Reputation: 25244

this solution is deprecated at the end of 2011, please use the answer that is marked as accepted above

found a solution myself

function check_ext_perm(session,callback) {
    var query = FB.Data.query('select publish_stream,read_stream from permissions where uid={0}', session["uid"]);
    query.wait(function(rows) {
        if(rows[0].publish_stream == 1 && rows[0].read_stream == 1) {
            callback(true);
        } else {
            callback(false);
        }
    });
};

this will check for publish_streamand read_stream

example use:

check_ext_perm(response.session, function(isworking) {
   if(isworking) {
      // post something to wall
   } else {
      // ask for login
   }
});

Upvotes: 16

Tim
Tim

Reputation: 6441

Update at the end of 2011:

FB.api('/me/permissions', function (response) {
    console.log(response);
} );

console output:

{
    data: [
        {
            create_note: 1,
            installed: 1,
            photo_upload: 1,
            publish_stream: 1,
            share_item: 1,
            status_update: 1,
            video_upload: 1,
        }
    ]
}

Upvotes: 68

tantalor
tantalor

Reputation: 119

Generalized choise's function,

function check_permissions (permissions, uid, cb) {
  FB.Data
    .query('select {0} from permissions where uid={1}', permissions, uid)
    .wait(function (res) {
      if (!res || res.length < 1) return cb(false);
      var row = res[0];
      var aperm = permissions.split(',');
      for (var i = 0; i < aperm.length; i++) {
        if (row[aperm[i]] != 1) return cb(false);
      }
      return cb(true);
  });
}

Calls the callback with true if the user has all of the permissions, otherwise calls the callback with false.

Upvotes: 1

jmlv21104
jmlv21104

Reputation: 89

FB.ui({
    method: 'permissions.request',
    perms: 'user_website',
    display: 'popup'
    },function(response) {
        alert(response.toSource());
        if (response && response.perms) {
            alert('Permissions granted: '+response.perms);
        } else if (!response.perms){
            alert('User did not authorize permission(s).');
        }
});

Upvotes: 1

Related Questions