Reputation: 25244
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
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
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
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_stream
and read_stream
example use:
check_ext_perm(response.session, function(isworking) {
if(isworking) {
// post something to wall
} else {
// ask for login
}
});
Upvotes: 16
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
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
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