Class: AgentCode::ResourcePolicy
- Inherits:
-
Object
- Object
- AgentCode::ResourcePolicy
- Defined in:
- lib/agentcode/policies/resource_policy.rb
Overview
Base policy for all AgentCode resources. Mirrors the Laravel ResourcePolicy exactly.
Permission format: 'slug.action' (e.g., 'posts.index', 'blogs.store') Supports wildcards:
- '*' grants access to everything
- 'posts.*' grants access to all actions on posts
Usage: class PostPolicy < AgentCode::ResourcePolicy # Override for custom logic: def update?(user, record) super && record.user_id == user.id end
# Attribute permissions:
def permitted_attributes_for_show(user)
has_role?(user, 'admin') ? ['*'] : ['id', 'title']
end
def hidden_attributes_for_show(user)
has_role?(user, 'admin') ? [] : ['internal_notes']
end
def permitted_attributes_for_create(user)
has_role?(user, 'admin') ? ['*'] : ['title', 'content']
end
def permitted_attributes_for_update(user)
has_role?(user, 'admin') ? ['*'] : ['title', 'content']
end
end
Instance Attribute Summary collapse
-
#record ⇒ Object
readonly
Returns the value of attribute record.
-
#user ⇒ Object
readonly
Returns the value of attribute user.
Class Method Summary collapse
-
.resource_slug ⇒ Object
The resource slug used for permission checks.
- .resource_slug=(slug) ⇒ Object
Instance Method Summary collapse
- #create? ⇒ Boolean
- #destroy? ⇒ Boolean (also: #delete?)
- #force_delete? ⇒ Boolean
-
#has_role?(user, role_slug) ⇒ Boolean
Check if the user has a specific role in the current organization.
-
#hidden_attributes_for_show(user) ⇒ Array<String>
Override to blacklist columns from API responses.
-
#index? ⇒ Boolean
(also: #view_any?)
------------------------------------------------------------------ Convention-based CRUD authorization ------------------------------------------------------------------.
-
#initialize(user, record) ⇒ ResourcePolicy
constructor
A new instance of ResourcePolicy.
-
#permitted_attributes_for_create(user) ⇒ Array<String>
Override to whitelist which fields a user can submit on create.
-
#permitted_attributes_for_show(user) ⇒ Array<String>
Override to whitelist which columns are visible in API responses.
-
#permitted_attributes_for_update(user) ⇒ Array<String>
Override to whitelist which fields a user can submit on update.
- #restore? ⇒ Boolean
- #show? ⇒ Boolean (also: #view?)
- #update? ⇒ Boolean
-
#view_trashed? ⇒ Boolean
------------------------------------------------------------------ Soft Delete authorization ------------------------------------------------------------------.
Constructor Details
#initialize(user, record) ⇒ ResourcePolicy
Returns a new instance of ResourcePolicy.
39 40 41 42 |
# File 'lib/agentcode/policies/resource_policy.rb', line 39 def initialize(user, record) @user = user @record = record end |
Instance Attribute Details
#record ⇒ Object (readonly)
Returns the value of attribute record.
37 38 39 |
# File 'lib/agentcode/policies/resource_policy.rb', line 37 def record @record end |
#user ⇒ Object (readonly)
Returns the value of attribute user.
37 38 39 |
# File 'lib/agentcode/policies/resource_policy.rb', line 37 def user @user end |
Class Method Details
.resource_slug ⇒ Object
The resource slug used for permission checks. Override in child policies, or it will be auto-resolved from config.
46 47 48 |
# File 'lib/agentcode/policies/resource_policy.rb', line 46 def self.resource_slug @resource_slug end |
.resource_slug=(slug) ⇒ Object
50 51 52 |
# File 'lib/agentcode/policies/resource_policy.rb', line 50 def self.resource_slug=(slug) @resource_slug = slug end |
Instance Method Details
#create? ⇒ Boolean
70 71 72 |
# File 'lib/agentcode/policies/resource_policy.rb', line 70 def create? ("store") end |
#destroy? ⇒ Boolean Also known as: delete?
78 79 80 |
# File 'lib/agentcode/policies/resource_policy.rb', line 78 def destroy? ("destroy") end |
#force_delete? ⇒ Boolean
96 97 98 |
# File 'lib/agentcode/policies/resource_policy.rb', line 96 def force_delete? ("forceDelete") end |
#has_role?(user, role_slug) ⇒ Boolean
Check if the user has a specific role in the current organization. Convenience method for use in child policies.
150 151 152 153 154 155 156 |
# File 'lib/agentcode/policies/resource_policy.rb', line 150 def has_role?(user, role_slug) return false unless user return false unless user.respond_to?(:role_slug_for_validation) organization = current_organization user.role_slug_for_validation(organization) == role_slug.to_s end |
#hidden_attributes_for_show(user) ⇒ Array<String>
Override to blacklist columns from API responses. These are always hidden, even if listed in permitted_attributes_for_show.
118 119 120 |
# File 'lib/agentcode/policies/resource_policy.rb', line 118 def hidden_attributes_for_show(user) [] end |
#index? ⇒ Boolean Also known as: view_any?
Convention-based CRUD authorization
58 59 60 |
# File 'lib/agentcode/policies/resource_policy.rb', line 58 def index? ("index") end |
#permitted_attributes_for_create(user) ⇒ Array<String>
Override to whitelist which fields a user can submit on create. Return ['*'] to allow all fields (default).
127 128 129 |
# File 'lib/agentcode/policies/resource_policy.rb', line 127 def permitted_attributes_for_create(user) ['*'] end |
#permitted_attributes_for_show(user) ⇒ Array<String>
Override to whitelist which columns are visible in API responses. Return ['*'] to allow all columns (default).
109 110 111 |
# File 'lib/agentcode/policies/resource_policy.rb', line 109 def permitted_attributes_for_show(user) ['*'] end |
#permitted_attributes_for_update(user) ⇒ Array<String>
Override to whitelist which fields a user can submit on update. Return ['*'] to allow all fields (default).
136 137 138 |
# File 'lib/agentcode/policies/resource_policy.rb', line 136 def permitted_attributes_for_update(user) ['*'] end |
#restore? ⇒ Boolean
92 93 94 |
# File 'lib/agentcode/policies/resource_policy.rb', line 92 def restore? ("restore") end |
#show? ⇒ Boolean Also known as: view?
64 65 66 |
# File 'lib/agentcode/policies/resource_policy.rb', line 64 def show? ("show") end |
#update? ⇒ Boolean
74 75 76 |
# File 'lib/agentcode/policies/resource_policy.rb', line 74 def update? ("update") end |
#view_trashed? ⇒ Boolean
Soft Delete authorization
88 89 90 |
# File 'lib/agentcode/policies/resource_policy.rb', line 88 def view_trashed? ("trashed") end |