Module: Sequel::Plugins::Privacy
- Extended by:
- T::Sig
- Defined in:
- lib/sequel/plugins/privacy.rb
Overview
Privacy plugin for Sequel models.
Provides:
-
Policy definition DSL (‘privacy` block)
-
Field-level privacy protection (‘field` in privacy block)
-
Privacy-aware queries (‘for_vc` method)
-
Automatic association privacy enforcement
Usage:
class Member < Sequel::Model
plugin :privacy
privacy do
can :view, P::AllowSelf, P::AllowAdmins
can :edit, P::AllowSelf, P::AllowAdmins
field :email, P::AllowSelf
field :phone, P::AllowSelf, P::AllowFriends
end
end
# Query with privacy enforcement
vc = Sequel::Privacy::ViewerContext.for_actor(current_user)
members = Member.for_vc(vc).where(org_id: 1).all
# Check permissions
member.allow?(vc, :view) # => true/false
member.email # => nil if :view_email denies
Defined Under Namespace
Modules: ClassMethods, DatasetMethods, InstanceMethods Classes: AssociationPrivacyDSL, PrivacyDSL
Class Method Summary collapse
Class Method Details
.apply(model, _opts = {}) ⇒ Object
41 42 43 44 45 46 47 |
# File 'lib/sequel/plugins/privacy.rb', line 41 def self.apply(model, _opts = {}) model.instance_variable_set(:@privacy_policies, {}) model.instance_variable_set(:@privacy_fields, {}) model.instance_variable_set(:@privacy_association_policies, {}) model.instance_variable_set(:@privacy_finalized, false) model.instance_variable_set(:@allow_unsafe_access, false) end |
.configure(model, opts = {}) ⇒ Object
51 52 53 |
# File 'lib/sequel/plugins/privacy.rb', line 51 def self.configure(model, opts = {}) # Currently no per-model configuration needed end |