|
| 1 | +require 'authzed' |
| 2 | + |
| 3 | +# Initialize the client |
| 4 | +client = Authzed::Api::V1::Client.new( |
| 5 | + target: 'grpc.authzed.com:443', |
| 6 | + interceptors: [Authzed::GrpcUtil::BearerToken.new(token: 'mytoken')], |
| 7 | +) |
| 8 | + |
| 9 | +# Define the subject (the user we're checking for) |
| 10 | +emilia = Authzed::Api::V1::SubjectReference.new( |
| 11 | + object: Authzed::Api::V1::ObjectReference.new( |
| 12 | + object_type: 'blog/user', |
| 13 | + object_id: 'emilia' |
| 14 | + ) |
| 15 | +) |
| 16 | + |
| 17 | +# Create a LookupResources request to find all posts that emilia can read |
| 18 | +request = Authzed::Api::V1::LookupResourcesRequest.new( |
| 19 | + resource_object_type: 'blog/post', |
| 20 | + permission: 'read', |
| 21 | + subject: emilia, |
| 22 | + consistency: Authzed::Api::V1::Consistency.new( |
| 23 | + fully_consistent: true |
| 24 | + ) |
| 25 | +) |
| 26 | + |
| 27 | +# LookupResources returns a streaming response |
| 28 | +# Collect all resource IDs into an array |
| 29 | +resources = [] |
| 30 | + |
| 31 | +puts "Looking up resources that emilia can read..." |
| 32 | + |
| 33 | +client.permissions_service.lookup_resources(request) do |response| |
| 34 | + # Each response contains one resource ID |
| 35 | + resource_id = response.resource_object_id |
| 36 | + resources << resource_id |
| 37 | + puts "Found resource: #{resource_id}" |
| 38 | +end |
| 39 | + |
| 40 | +puts "\nTotal resources found: #{resources.length}" |
| 41 | +puts "Resource IDs: #{resources.join(', ')}" |
| 42 | + |
| 43 | +# You can also look up resources with a specific permission |
| 44 | +# For example, find all posts that emilia can write |
| 45 | +write_request = Authzed::Api::V1::LookupResourcesRequest.new( |
| 46 | + resource_object_type: 'blog/post', |
| 47 | + permission: 'write', |
| 48 | + subject: emilia, |
| 49 | + consistency: Authzed::Api::V1::Consistency.new( |
| 50 | + fully_consistent: true |
| 51 | + ) |
| 52 | +) |
| 53 | + |
| 54 | +writable_resources = [] |
| 55 | + |
| 56 | +puts "\nLooking up resources that emilia can write..." |
| 57 | + |
| 58 | +client.permissions_service.lookup_resources(write_request) do |response| |
| 59 | + resource_id = response.resource_object_id |
| 60 | + writable_resources << resource_id |
| 61 | + puts "Found writable resource: #{resource_id}" |
| 62 | +end |
| 63 | + |
| 64 | +puts "\nTotal writable resources found: #{writable_resources.length}" |
| 65 | +puts "Writable resource IDs: #{writable_resources.join(', ')}" |
0 commit comments