Skip to main content

FolderPermissionRule

Struct FolderPermissionRule 

Source
pub struct FolderPermissionRule {
    pub folder_id: Option<String>,
    pub file_id: Option<String>,
    pub recursive: bool,
    pub allow: HashSet<DriveOperation>,
    pub deny: HashSet<DriveOperation>,
    pub require_lease: bool,
}
Expand description

One configured permission rule, keyed on either a folder id or a file id — exactly one of the two, enforced when the settings file is deserialized (see the private RawPermissionRule below).

Ids are Drive’s own canonical ids, not paths — Drive objects have no stable, unique path (names collide, files can have multiple legacy parents), so identity is the id, exactly as the browser bridge’s OriginAllowlist matches exact origin strings rather than URL patterns.

A file_id rule is what makes a file shared by link or email grantable at all (issue #1612): files.get returns only the parents this account can see, so such a file arrives with none, and no folder rule could ever apply to it.

Fields§

§folder_id: Option<String>

The Drive folder id this rule matches, for a folder rule.

§file_id: Option<String>

The Drive file id this rule matches, for a file rule. Matched at depth −1 against the target itself, before any ancestor walk — see resolve_file_rule.

§recursive: bool

When true, this rule also matches every descendant of folder_id, not just the folder itself (depth > 0 in the ancestor chain). A non-recursive rule only ever matches at depth 0. Meaningless — and rejected — on a file_id rule: a file has no descendants.

§allow: HashSet<DriveOperation>

Operations explicitly permitted at this target.

§deny: HashSet<DriveOperation>

Operations explicitly refused at this target.

§require_lease: bool

Whether a content-mutating write matching this rule requires a valid Drive write lease (ADR-0080 §1/§13) in addition to this gate’s own verdict. Defaults to true; an operator sets it to false to relax the requirement for a specific folder, which skips both the backup and the Touch ID prompt (§13) — a rule that skipped only one of the two would either surprise an operator who explicitly relaxed this, or ask for consent to a guarantee it then doesn’t provide. Independent of allow/deny: the lease is orthogonal to this gate, not another operation in its vocabulary.

Implementations§

Source§

impl FolderPermissionRule

Source

pub fn folder(folder_id: impl Into<String>) -> Self

A folder rule naming folder_id.

Source

pub fn file(file_id: impl Into<String>) -> Self

A file rule naming file_id.

Source

pub fn recursive(self, recursive: bool) -> Self

Sets recursive, for builder-style construction in tests and callers assembling rules programmatically.

Source

pub fn requiring_lease(self, require_lease: bool) -> Self

Sets require_lease, for builder-style construction in tests and callers assembling rules programmatically.

Source

pub fn allowing(self, ops: impl IntoIterator<Item = DriveOperation>) -> Self

Sets the allow set.

Source

pub fn denying(self, ops: impl IntoIterator<Item = DriveOperation>) -> Self

Sets the deny set.

Trait Implementations§

Source§

impl Clone for FolderPermissionRule

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for FolderPermissionRule

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for FolderPermissionRule

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for FolderPermissionRule

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more