You can use googledrive to manage permissions on your Drive files, i.e. grant different people or groups of people various levels of access (read, comment, edit, etc.).
Let’s upload a file and view its permissions.
library(googledrive)
file <- drive_example("chicken.txt") %>%
drive_upload(name = "chicken-perm-article.txt") %>%
drive_reveal("permissions")
#> Local file:
#> * /Users/jenny/resources/R/library/googledrive/extdata/chicken.txt
#> uploaded into Drive file:
#> * chicken-perm-article.txt: 1isdRAdGMHulMfq1htb8uR_3ZqbZpzB6N
#> with MIME type:
#> * text/plain
file
#> # A tibble: 1 x 5
#> name shared id drive_resource permissions_reso…
#> * <chr> <lgl> <chr> <list> <list>
#> 1 chicken-perm-… FALSE 1isdRAdGMHulMfq1… <list [38]> <list [2]>The shared column shows that this file is not yet shared with anyone and, for those so inclined, detailed information on permissions can be found in the permissions_resource list-column.
Let’s give a specific person permission to edit this file and a customized message, using the emailAddress and emailMessage parameters.
file <- file %>%
drive_share(
role = "writer",
type = "user",
emailAddress = "serena@example.com",
emailMessage = "Would appreciate your feedback on this!"
)
file#> Permissions updated
#> * role = writer
#> * type = user
#> For files:
#> * chicken-perm-article.txt: 1isdRAdGMHulMfq1htb8uR_3ZqbZpzB6N
#> # A tibble: 1 x 5
#> name shared id drive_resource permissions_reso…
#> * <chr> <lgl> <chr> <list> <list>
#> 1 chicken-perm-… TRUE 1isdRAdGMHulMfq1… <list [39]> <list [2]>
We see that the file is now shared. We also want anyone to be able to read the file.
file <- file %>%
drive_share(role = "reader", type = "anyone")
#> Permissions updated
#> * role = reader
#> * type = anyone
#> For files:
#> * chicken-perm-article.txt: 1isdRAdGMHulMfq1htb8uR_3ZqbZpzB6NNow that we’ve made a few updates to our permissions, the permissions_resource list-column has become more interesting. Here’s how to pull important information out of this and put into a tibble with one row per permission. (Permission handling will become more formalized in future versions of googledrive. See the issue). We use other packages in the tidyverse now for this data wrangling.
library(tidyverse)
#> ── Attaching packages ───────────────────────────────────────── tidyverse 1.2.1 ──
#> ✔ ggplot2 3.0.0 ✔ purrr 0.2.5
#> ✔ tibble 1.4.99.9004 ✔ dplyr 0.7.99.9000
#> ✔ tidyr 0.8.1 ✔ stringr 1.3.1
#> ✔ readr 1.2.0 ✔ forcats 0.3.0
#> ── Conflicts ──────────────────────────────────────────── tidyverse_conflicts() ──
#> ✖ dplyr::filter() masks stats::filter()
#> ✖ dplyr::lag() masks stats::lag()
perm <- pluck(file, "permissions_resource", 1, "permissions")
permissions <- tibble(
id = map_chr(perm, "id", .default = NA_character_),
name = map_chr(perm, "displayName", .default = NA_character_),
type = map_chr(perm, "type", .default = NA_character_),
role = map_chr(perm, "role", .default = NA_character_),
email = map_chr(perm, "emailAddress", .default = NA_character_)
)
as.data.frame(permissions)
#> id name type role
#> 1 14650328737125225074 Jennifer Bryan user writer
#> 2 anyoneWithLink <NA> anyone reader
#> 3 01555823402173812461 tidyverse testdrive user owner
#> email
#> 1 jenny@stat.ubc.ca
#> 2 <NA>
#> 3 tidyverse.testdrive@gmail.com