check for extended permissions with new facebook javascript sdk

Solution 1:

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,
        }
    ]
}

Solution 2:

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
   }
});

Solution 3:

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).');
        }
});

Solution 4:

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.