summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormo khan <mo@mokhan.ca>2025-03-05 17:49:59 -0700
committermo khan <mo@mokhan.ca>2025-03-05 17:49:59 -0700
commite31ddc33417517fb754cbd7e13f8a13746bede02 (patch)
treec60f1ceb3246e2acdb733af7f07a56f6ea7a8ea9
parent44ad2cca852adc6a344f4b357ff7727bb72c3a6c (diff)
feat: add declarative policy
-rwxr-xr-xbin/rpc18
1 files changed, 17 insertions, 1 deletions
diff --git a/bin/rpc b/bin/rpc
index fe9a0dcc..aa154c8e 100755
--- a/bin/rpc
+++ b/bin/rpc
@@ -5,6 +5,7 @@ require "bundler/inline"
gemfile do
source "https://rubygems.org"
+ gem "declarative_policy", "~> 1.0"
gem "grpc", "~> 1.0"
gem "grpc-tools", "~> 1.0"
gem "logger", "~> 1.0"
@@ -15,12 +16,27 @@ $LOAD_PATH.unshift(lib_path) unless $LOAD_PATH.include?(lib_path)
require 'ability_services_pb'
+class ProjectPolicy < DeclarativePolicy::Base
+ condition(:owner) { @subject.owner?(@user) }
+
+ rule { owner }.enable :create_project
+end
+
class AbilityHandler < ::Ability::Service
def allowed(request, _call)
puts [request, _call].inspect
- # TODO:: entrypoint to declarative policies
GRPC.logger.info([request, _call].inspect)
+
AllowReply.new(result: true)
+ # TODO:: entrypoint to declarative policies
+ # AllowReply.new(result: policy_for(request).can?(request.permission))
+ end
+
+ private
+
+ def policy_for(request)
+ # TODO:: convert subject in form of GlobalID to Resource Type
+ DeclarativePolicy.policy_for(request.subject, request.resource)
end
end