Policy

Struct Policy 

Source
pub struct Policy {
    pub name: Ident,
    pub table: Ident,
    pub policy_type: PolicyType,
    pub commands: Vec<PolicyCommand>,
    pub roles: Vec<SmolStr>,
    pub using_expr: Option<String>,
    pub check_expr: Option<String>,
    pub mssql_schema: Option<SmolStr>,
    pub mssql_block_operations: Vec<MssqlBlockOperation>,
    pub documentation: Option<Documentation>,
    pub span: Span,
}
Expand description

A Row-Level Security (RLS) policy definition.

Policies provide fine-grained access control at the row level. They are applied to tables and evaluated for each row operation.

§Example Schema Syntax

policy UserReadOwnData on User {
    for     SELECT
    to      authenticated
    using   "id = current_user_id()"
}

policy UserModifyOwnData on User {
    for     [INSERT, UPDATE, DELETE]
    to      authenticated
    using   "id = current_user_id()"
    check   "id = current_user_id()"
}

§Database Support

  • PostgreSQL: Full support via CREATE POLICY
  • SQL Server: Supported via Security Policies with predicate functions

Fields§

§name: Ident

Policy name (must be unique per table).

§table: Ident

The model/table this policy applies to.

§policy_type: PolicyType

Policy type: PERMISSIVE (default) or RESTRICTIVE.

§commands: Vec<PolicyCommand>

Commands this policy applies to (SELECT, INSERT, UPDATE, DELETE, or ALL).

§roles: Vec<SmolStr>

Roles this policy applies to (default: PUBLIC).

§using_expr: Option<String>

USING expression - evaluated for existing rows (SELECT, UPDATE, DELETE). Should return boolean. Row is visible if expression returns true. In MSSQL, this becomes the FILTER PREDICATE.

§check_expr: Option<String>

WITH CHECK expression - evaluated for new rows (INSERT, UPDATE). Should return boolean. Row can be inserted/updated if expression returns true. In MSSQL, this becomes BLOCK PREDICATE(s).

§mssql_schema: Option<SmolStr>

MSSQL-specific: Schema for the predicate function (default: “Security”).

§mssql_block_operations: Vec<MssqlBlockOperation>

MSSQL-specific: Block operations to apply (default: all applicable).

§documentation: Option<Documentation>

Documentation comment.

§span: Span

Source location.

Implementations§

Source§

impl Policy

Source

pub fn new(name: Ident, table: Ident, span: Span) -> Policy

Create a new policy.

Source

pub fn name(&self) -> &str

Get the policy name as a string.

Source

pub fn table(&self) -> &str

Get the table name as a string.

Source

pub fn with_type(self, policy_type: PolicyType) -> Policy

Set the policy type.

Source

pub fn with_commands(self, commands: Vec<PolicyCommand>) -> Policy

Set the commands this policy applies to.

Source

pub fn add_command(&mut self, command: PolicyCommand)

Add a command this policy applies to.

Source

pub fn with_roles(self, roles: Vec<SmolStr>) -> Policy

Set the roles this policy applies to.

Source

pub fn add_role(&mut self, role: impl Into<SmolStr>)

Add a role this policy applies to.

Source

pub fn with_using(self, expr: impl Into<String>) -> Policy

Set the USING expression.

Source

pub fn with_check(self, expr: impl Into<String>) -> Policy

Set the WITH CHECK expression.

Source

pub fn with_documentation(self, doc: Documentation) -> Policy

Set documentation.

Source

pub fn with_mssql_schema(self, schema: impl Into<SmolStr>) -> Policy

Set the MSSQL schema for the predicate function.

Source

pub fn with_mssql_block_operations( self, operations: Vec<MssqlBlockOperation>, ) -> Policy

Set the MSSQL block operations.

Source

pub fn add_mssql_block_operation(&mut self, operation: MssqlBlockOperation)

Add an MSSQL block operation.

Source

pub fn applies_to(&self, command: PolicyCommand) -> bool

Check if this policy applies to a specific command.

Source

pub fn is_restrictive(&self) -> bool

Check if this policy is restrictive.

Source

pub fn is_permissive(&self) -> bool

Check if this policy is permissive.

Source

pub fn effective_roles(&self) -> Vec<&str>

Get the effective roles (PUBLIC if none specified).

Source

pub fn mssql_schema(&self) -> &str

Get the MSSQL schema (default: “Security”).

Source

pub fn mssql_predicate_function_name(&self) -> String

Get the predicate function name for MSSQL.

Source

pub fn to_sql(&self, table_name: &str) -> String

Generate the PostgreSQL CREATE POLICY statement.

Source

pub fn to_postgres_sql(&self, table_name: &str) -> String

Generate the PostgreSQL CREATE POLICY statement.

Source

pub fn to_mssql_sql( &self, table_name: &str, predicate_column: &str, ) -> MssqlPolicyStatements

Generate SQL Server (MSSQL) security policy statements.

Returns a tuple of:

  1. CREATE FUNCTION statement for the predicate function
  2. CREATE SECURITY POLICY statement
§Arguments
  • table_name - The fully qualified table name (e.g., “dbo.Users”)
  • predicate_column - The column name to use in the predicate (e.g., “UserId”)
§Example
let (func_sql, policy_sql) = policy.to_mssql_sql("dbo.Users", "UserId");

Trait Implementations§

Source§

impl Clone for Policy

Source§

fn clone(&self) -> Policy

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for Policy

Source§

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

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

impl<'de> Deserialize<'de> for Policy

Source§

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

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

impl PartialEq for Policy

Source§

fn eq(&self, other: &Policy) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for Policy

Source§

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

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for Policy

Auto Trait Implementations§

§

impl Freeze for Policy

§

impl RefUnwindSafe for Policy

§

impl Send for Policy

§

impl Sync for Policy

§

impl Unpin for Policy

§

impl UnwindSafe for Policy

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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<D> OwoColorize for D

Source§

fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>
where C: Color,

Set the foreground color generically Read more
Source§

fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>
where C: Color,

Set the background color generically. Read more
Source§

fn black(&self) -> FgColorDisplay<'_, Black, Self>

Change the foreground color to black
Source§

fn on_black(&self) -> BgColorDisplay<'_, Black, Self>

Change the background color to black
Source§

fn red(&self) -> FgColorDisplay<'_, Red, Self>

Change the foreground color to red
Source§

fn on_red(&self) -> BgColorDisplay<'_, Red, Self>

Change the background color to red
Source§

fn green(&self) -> FgColorDisplay<'_, Green, Self>

Change the foreground color to green
Source§

fn on_green(&self) -> BgColorDisplay<'_, Green, Self>

Change the background color to green
Source§

fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>

Change the foreground color to yellow
Source§

fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>

Change the background color to yellow
Source§

fn blue(&self) -> FgColorDisplay<'_, Blue, Self>

Change the foreground color to blue
Source§

fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>

Change the background color to blue
Source§

fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to magenta
Source§

fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to magenta
Source§

fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to purple
Source§

fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to purple
Source§

fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>

Change the foreground color to cyan
Source§

fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>

Change the background color to cyan
Source§

fn white(&self) -> FgColorDisplay<'_, White, Self>

Change the foreground color to white
Source§

fn on_white(&self) -> BgColorDisplay<'_, White, Self>

Change the background color to white
Source§

fn default_color(&self) -> FgColorDisplay<'_, Default, Self>

Change the foreground color to the terminal default
Source§

fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>

Change the background color to the terminal default
Source§

fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>

Change the foreground color to bright black
Source§

fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>

Change the background color to bright black
Source§

fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>

Change the foreground color to bright red
Source§

fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>

Change the background color to bright red
Source§

fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>

Change the foreground color to bright green
Source§

fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>

Change the background color to bright green
Source§

fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>

Change the foreground color to bright yellow
Source§

fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>

Change the background color to bright yellow
Source§

fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>

Change the foreground color to bright blue
Source§

fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>

Change the background color to bright blue
Source§

fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright magenta
Source§

fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright magenta
Source§

fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright purple
Source§

fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright purple
Source§

fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>

Change the foreground color to bright cyan
Source§

fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>

Change the background color to bright cyan
Source§

fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>

Change the foreground color to bright white
Source§

fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>

Change the background color to bright white
Source§

fn bold(&self) -> BoldDisplay<'_, Self>

Make the text bold
Source§

fn dimmed(&self) -> DimDisplay<'_, Self>

Make the text dim
Source§

fn italic(&self) -> ItalicDisplay<'_, Self>

Make the text italicized
Source§

fn underline(&self) -> UnderlineDisplay<'_, Self>

Make the text underlined
Make the text blink
Make the text blink (but fast!)
Source§

fn reversed(&self) -> ReversedDisplay<'_, Self>

Swap the foreground and background colors
Source§

fn hidden(&self) -> HiddenDisplay<'_, Self>

Hide the text
Source§

fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>

Cross out the text
Source§

fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either OwoColorize::fg or a color-specific method, such as OwoColorize::green, Read more
Source§

fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either OwoColorize::bg or a color-specific method, such as OwoColorize::on_yellow, Read more
Source§

fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the foreground color to a specific RGB value.
Source§

fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the background color to a specific RGB value.
Source§

fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>

Sets the foreground color to an RGB value.
Source§

fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>

Sets the background color to an RGB value.
Source§

fn style(&self, style: Style) -> Styled<&Self>

Apply a runtime-determined style
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 = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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
Source§

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