【发布时间】: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