Mike Barwick
Mike Barwick

Reputation: 5367

Facebook PHP SDK: Check if a user has granted a certain set of permissions

I want to check that a user has authorized the following permissions; 'manage_pages', 'publish_pages', 'read_insights', for my app. In short, if they decline one or more permissions, I need to know, as all are required.

Here's my callback method once I get the user's access token. How do I verify they approved all permission requests?

Note: I'm using the SammyK Laravel Facebook SDK package.

public function handleFacebookCallback()
    {
        try {
            $token = Facebook::getAccessTokenFromRedirect();

            $user = Facebook::get('/me?fields=permissions', $token)->getGraphUser();
            $permissions = $user['permissions']->asArray();

            // permissions: 'manage_pages', 'publish_pages', 'read_insights'

            if (array_key_exists('publish_pages', $permissions['data'][0]))
            {
                // permissions exist, proceed
            }
            else 
            {
                // user denied permission(s), redirect
            }
        }
        ....

Upvotes: 1

Views: 1032

Answers (2)

Touqeer Shafi
Touqeer Shafi

Reputation: 5264

According to Facebook Graph API you can call user/permissions to get all the permissions that user has granted to application.

$request = new FacebookRequest(
  $session,
  'GET',
  '/me/permissions'
);

$response = $request->execute();
$graphObject = $response->getGraphObject();
/* handle the result */

foreach($graphObject as $permission) {
        if($permission->permission == 'publish_pages' AND $permission->status == 'granted') {
            // User has granted publish_pages permission
    }
}

You can debug this call here, I've not tested it but it should work.

Upvotes: 1

Mike Barwick
Mike Barwick

Reputation: 5367

Not sure if this is the slickest answer or how others would approach this, but here's what I came up with...

try {
    $token = Facebook::getAccessTokenFromRedirect();

    $request = Facebook::get('/me?fields=permissions', $token);
    $user = $request->getGraphUser();
    $permissions = $user['permissions'];

    // if user denied ANY of the required permissions
    foreach ($permissions as $p => $permission) 
    {
        if ($permission['status'] !== 'granted')
        {
            return redirect()->route('connect.index')->withErrors('Error: We require all permissions in order to connect your Facebook page.');
        }
    }
} 

Upvotes: 0

Related Questions