sequel-privacy 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +20 -0
- data/LICENSE.txt +21 -0
- data/README.md +412 -0
- data/lib/sequel/plugins/privacy.rb +792 -0
- data/lib/sequel/privacy/actions.rb +40 -0
- data/lib/sequel/privacy/built_in_policies.rb +37 -0
- data/lib/sequel/privacy/cache.rb +33 -0
- data/lib/sequel/privacy/enforcer.rb +246 -0
- data/lib/sequel/privacy/errors.rb +23 -0
- data/lib/sequel/privacy/i_actor.rb +17 -0
- data/lib/sequel/privacy/policy.rb +82 -0
- data/lib/sequel/privacy/policy_dsl.rb +38 -0
- data/lib/sequel/privacy/version.rb +8 -0
- data/lib/sequel/privacy/viewer_context.rb +127 -0
- data/lib/sequel-privacy.rb +33 -0
- data/rbi/sequel_privacy.rbi +66 -0
- metadata +144 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
|
|
3
|
+
module Sequel
|
|
4
|
+
module Privacy
|
|
5
|
+
# Actions is a Struct instance used as the binding context for policy
|
|
6
|
+
# evaluation via instance_exec. Defined in actions.rb (typed: ignore).
|
|
7
|
+
class Actions
|
|
8
|
+
extend T::Sig
|
|
9
|
+
|
|
10
|
+
sig { returns(Symbol) }
|
|
11
|
+
def allow; end
|
|
12
|
+
|
|
13
|
+
sig { returns(Symbol) }
|
|
14
|
+
def deny; end
|
|
15
|
+
|
|
16
|
+
sig { returns(Symbol) }
|
|
17
|
+
def pass; end
|
|
18
|
+
|
|
19
|
+
sig { params(policies: T.untyped).returns(T::Array[T.untyped]) }
|
|
20
|
+
def all(*policies); end
|
|
21
|
+
|
|
22
|
+
sig {
|
|
23
|
+
params(
|
|
24
|
+
args: T.untyped,
|
|
25
|
+
block: Policy
|
|
26
|
+
).returns(T.untyped)
|
|
27
|
+
}
|
|
28
|
+
def self.instance_exec(*args, &block); end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
class PrivacyDSL
|
|
32
|
+
extend T::Sig
|
|
33
|
+
|
|
34
|
+
sig { params(action: Symbol, policies: T.untyped).void }
|
|
35
|
+
def can(action, *policies); end
|
|
36
|
+
|
|
37
|
+
sig { params(field_name: Symbol, policies: T.untyped).void }
|
|
38
|
+
def field(field_name, *policies); end
|
|
39
|
+
|
|
40
|
+
sig { params(association_name: Symbol, blk: T.proc.void).void }
|
|
41
|
+
def association(association_name, &blk); end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
module Plugins
|
|
46
|
+
module Privacy
|
|
47
|
+
module ClassMethods
|
|
48
|
+
# The privacy block is evaluated in the context of PrivacyDSL
|
|
49
|
+
sig { params(blk: T.proc.bind(Sequel::Privacy::PrivacyDSL).void).void }
|
|
50
|
+
def privacy(&blk); end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
module InstanceMethods
|
|
54
|
+
# Declare the @viewer_context instance variable for the mixin
|
|
55
|
+
sig { returns(T.nilable(Sequel::Privacy::ViewerContext)) }
|
|
56
|
+
attr_accessor :viewer_context
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
module DatasetMethods
|
|
60
|
+
# model is inherited from Sequel::Dataset but not visible to Sorbet
|
|
61
|
+
sig { returns(T.class_of(Sequel::Model)) }
|
|
62
|
+
def model; end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: sequel-privacy
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Austin Bales
|
|
8
|
+
bindir: bin
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: sequel
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - "~>"
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '5.0'
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - "~>"
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '5.0'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: sorbet-runtime
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - "~>"
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '0.5'
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - "~>"
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '0.5'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: rspec
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - "~>"
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '3.0'
|
|
47
|
+
type: :development
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - "~>"
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '3.0'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: sqlite3
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - "~>"
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '1.4'
|
|
61
|
+
type: :development
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - "~>"
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '1.4'
|
|
68
|
+
- !ruby/object:Gem::Dependency
|
|
69
|
+
name: sorbet
|
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - "~>"
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: '0.5'
|
|
75
|
+
type: :development
|
|
76
|
+
prerelease: false
|
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - "~>"
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '0.5'
|
|
82
|
+
- !ruby/object:Gem::Dependency
|
|
83
|
+
name: tapioca
|
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
|
85
|
+
requirements:
|
|
86
|
+
- - "~>"
|
|
87
|
+
- !ruby/object:Gem::Version
|
|
88
|
+
version: '0.17'
|
|
89
|
+
type: :development
|
|
90
|
+
prerelease: false
|
|
91
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
92
|
+
requirements:
|
|
93
|
+
- - "~>"
|
|
94
|
+
- !ruby/object:Gem::Version
|
|
95
|
+
version: '0.17'
|
|
96
|
+
description: A Sequel plugin that provides declarative privacy policies and automatic
|
|
97
|
+
enforcement at field access and query boundaries.
|
|
98
|
+
email:
|
|
99
|
+
- arbales@gmail.com
|
|
100
|
+
executables: []
|
|
101
|
+
extensions: []
|
|
102
|
+
extra_rdoc_files: []
|
|
103
|
+
files:
|
|
104
|
+
- CHANGELOG.md
|
|
105
|
+
- LICENSE.txt
|
|
106
|
+
- README.md
|
|
107
|
+
- lib/sequel-privacy.rb
|
|
108
|
+
- lib/sequel/plugins/privacy.rb
|
|
109
|
+
- lib/sequel/privacy/actions.rb
|
|
110
|
+
- lib/sequel/privacy/built_in_policies.rb
|
|
111
|
+
- lib/sequel/privacy/cache.rb
|
|
112
|
+
- lib/sequel/privacy/enforcer.rb
|
|
113
|
+
- lib/sequel/privacy/errors.rb
|
|
114
|
+
- lib/sequel/privacy/i_actor.rb
|
|
115
|
+
- lib/sequel/privacy/policy.rb
|
|
116
|
+
- lib/sequel/privacy/policy_dsl.rb
|
|
117
|
+
- lib/sequel/privacy/version.rb
|
|
118
|
+
- lib/sequel/privacy/viewer_context.rb
|
|
119
|
+
- rbi/sequel_privacy.rbi
|
|
120
|
+
homepage: https://github.com/arbales/sequel-privacy
|
|
121
|
+
licenses:
|
|
122
|
+
- MIT
|
|
123
|
+
metadata:
|
|
124
|
+
homepage_uri: https://github.com/arbales/sequel-privacy
|
|
125
|
+
source_code_uri: https://github.com/arbales/sequel-privacy
|
|
126
|
+
changelog_uri: https://github.com/arbales/sequel-privacy/blob/main/CHANGELOG.md
|
|
127
|
+
rdoc_options: []
|
|
128
|
+
require_paths:
|
|
129
|
+
- lib
|
|
130
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
131
|
+
requirements:
|
|
132
|
+
- - ">="
|
|
133
|
+
- !ruby/object:Gem::Version
|
|
134
|
+
version: 3.0.0
|
|
135
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
136
|
+
requirements:
|
|
137
|
+
- - ">="
|
|
138
|
+
- !ruby/object:Gem::Version
|
|
139
|
+
version: '0'
|
|
140
|
+
requirements: []
|
|
141
|
+
rubygems_version: 3.6.9
|
|
142
|
+
specification_version: 4
|
|
143
|
+
summary: Privacy enforcement plugin for Sequel models
|
|
144
|
+
test_files: []
|