【问题标题】:Google Calendar API per event user access rights每个事件用户访问权限的 Google Calendar API
【发布时间】:2018-02-14 09:42:39
【问题描述】:

我们有一个共享日历,其中包含许多事件。但问题是所有用户对每个事件都应该有不同的访问权限。

因此,在一个日历的范围内,每个用户应该参加不同的活动。并且用户没有参加的那些应该对他完全不可见。

现在我们遇到了一种情况,即某个事件被标记为私人,并且用户未被邀请 - 在他的日历上有一个标记 busy,没有事件详细信息。但是当他不参加时,我们不需要在用户的日历上做任何标记。

这就是我们为日历设置规则的方式

$rule = new Google_Service_Calendar_AclRule();
    $scope = new Google_Service_Calendar_AclRuleScope();

    $scope->setType( 'user' );
    $scope->setValue( 'mail@gmail.com' );
    $rule->setScope( $scope );
    $rule->setRole( 'reader' );
    //$rule->setRole( 'freeBusyReader' );

    $createdRule = $service->acl->insert( $createdCalendar->getId(), $rule );

这就是我们创建活动的方式

$event = new Google_Service_Calendar_Event( array(
        'summary'       => 'Google I/O 2015',
        'location'      => '800 Howard St., San Francisco, CA 94103',
        'description'   => 'A chance to hear more about Google\'s developer products.',
        'visibility'    => 'private',
        'start'         => array(
            'dateTime' => '2018-02-15T09:00:00-07:00',
            'timeZone' => 'America/Los_Angeles',
        ),
        'end' => array(
            'dateTime' => '2018-02-15T17:00:00-07:00',
            'timeZone' => 'America/Los_Angeles',
        ),
        'recurrence' => array(
            'RRULE:FREQ=DAILY;COUNT=2'
        ),
        'attendees' => array(
            array( 'email' => 'mail2@gmail.com' ),
            //array( 'email' => 'mail@gmail.com' ),
        ),
        'reminders' => array(
            'useDefault'    => FALSE,
            'overrides'     => array(
                array('method' => 'email', 'minutes' => 24 * 60),
                array('method' => 'popup', 'minutes' => 10),
            ),
        ),
    ));

    $event = $service->events->insert( $calendarId, $event );

所以我们需要类似 ACL 角色 none (https://developers.google.com/google-apps/calendar/v3/reference/acl) 但在每个事件范围内,而不是整个日历。

有什么办法可以做到吗?

【问题讨论】:

  • 我认为如果 API 不支持它,您可以自己在 PHP 代码中实施限制,在与事件相关的 API 交互之前检查参与者列表中的事件。

标签: php api google-api google-calendar-api


【解决方案1】:

事件的“透明度”参数应设置为“透明”

    $event = new Google_Service_Calendar_Event( array(
    'summary'       => 'Google I/O 2015',
    'location'      => '800 Howard St., San Francisco, CA 94103',
    'description'   => 'A chance to hear more about Google\'s developer products.',
    'visibility'    => 'private',
    'transparency'  => 'transparent',
    'start'         => array(
        'dateTime' => '2018-02-15T09:00:00-07:00',
        'timeZone' => 'America/Los_Angeles',
    ),
    'end' => array(
        'dateTime' => '2018-02-15T17:00:00-07:00',
        'timeZone' => 'America/Los_Angeles',
    ),
    'recurrence' => array(
        'RRULE:FREQ=DAILY;COUNT=2'
    ),
    'attendees' => array(
        array( 'email' => 'mail2@gmail.com' ),
        //array( 'email' => 'mail@gmail.com' ),
    ),
    'reminders' => array(
        'useDefault'    => FALSE,
        'overrides'     => array(
            array('method' => 'email', 'minutes' => 24 * 60),
            array('method' => 'popup', 'minutes' => 10),
        ),
    ),
));

$event = $service->events->insert( $calendarId, $event );

【讨论】:

  • 您能否在您的答案中添加一个解释,说明为什么这应该有效?
  • 是的。我测试过))
  • 这不是一个有效的解释。请尝试使您的答案对其他人也有用。请注意How to answer 中声明“简洁是可以接受的,但更全面的解释更好”的部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-09
  • 2012-11-19
相关资源
最近更新 更多