Google日历PHP API -检查用户是否具有编辑权限

y1aodyip  于 2023-01-08  发布在  PHP
关注(0)|答案(2)|浏览(119)

我有一个网站,用户可以授予访问编辑他们的谷歌日历。在网站的主页上显示了从公司日历的事件列表,事件是可编辑的。
问题是,网站上的所有用户都没有权限编辑日历中的事件(即他们的Google帐户),有没有办法检查用户是否有权通过PHP API client编辑日历?
澄清一下,不是所有用户都有编辑日历的权限。如果他们的谷歌账户有权限,编辑工具应该显示出来。否则他们只会得到事件列表。
在本例中,日历是公开的,因此每个人都应该能够看到事件。
(It如果它也能用在非公开的日历上也没什么,但我想那会更麻烦,需要一个后备服务帐户之类的。)
我目前正在使用Events Resourcelist method来获取事件。

m0rkklqb

m0rkklqb1#

Calendar list get返回日历列表资源
它有一个叫做访问角色的角色
accessRole字符串已通过身份验证的用户在日历上具有的有效访问角色。只读。
可能的值为:

  • "freeBusyReader"-提供对忙/闲信息的读取访问。
  • "reader"-提供对日历的读取访问权限。私人事件将向具有读取访问权限的用户显示,但事件详细信息将被隐藏。
  • "writer"-提供对日历的读写访问权限。具有writer访问权限的用户将看到私人事件,并且可以看到事件详细信息。
  • "owner"-提供日历的所有权。此角色具有编写者角色的所有权限,还具有查看和操作ACL的附加能力。

PHP代码如下所示:

calendarListEntry = $service->calendarList->get('calendarId');

注意:使用服务帐户要比脚本访问日历容易得多,您可以使用脚本编辑日历,而无需访问用户帐户。

58wvjzkj

58wvjzkj2#

这将为您提供访问角色信息。

// list all user calendars
        $calendars = $this->service->calendarList->listCalendarList();
        var_export($calendars);
        
        // list specific calendar
        $ca = $this->service->calendarList->get($cid);
        $role = $ca->getAccessRole();
        if ($role != 'writer' || $role != 'owner') {
            // cannot write
            $errorRightsInfo[] = '#'.$ca->getId().' - '.$ca->getSummary(). ' … '.$role;
        }
    }

相关问题