Class: Collavre::Creatives::PermissionChecker
- Inherits:
-
Object
- Object
- Collavre::Creatives::PermissionChecker
- Defined in:
- app/services/collavre/creatives/permission_checker.rb
Instance Method Summary collapse
- #allowed?(required_permission = :read) ⇒ Boolean
-
#initialize(creative, user) ⇒ PermissionChecker
constructor
A new instance of PermissionChecker.
Constructor Details
#initialize(creative, user) ⇒ PermissionChecker
Returns a new instance of PermissionChecker.
4 5 6 7 |
# File 'app/services/collavre/creatives/permission_checker.rb', line 4 def initialize(creative, user) @creative = creative @user = user end |
Instance Method Details
#allowed?(required_permission = :read) ⇒ Boolean
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'app/services/collavre/creatives/permission_checker.rb', line 9 def allowed?( = :read) base = creative.origin_id.nil? ? creative : creative.origin # Owner always has admin permission (fallback for fixtures and missing cache entries) return true if base.user_id == user&.id # O(1) 캐시 테이블 조회 # 사용자별 엔트리를 먼저 확인 (no_access가 public share보다 우선) if user user_entry = CreativeSharesCache.find_by(creative_id: base.id, user_id: user.id) if user_entry # no_access는 명시적 거부 - public share가 있어도 차단 return false if user_entry.no_access? return (user_entry.) >= () end end # 사용자별 엔트리 없으면 public share 확인 public_entry = CreativeSharesCache.find_by(creative_id: base.id, user_id: nil) return false unless public_entry (public_entry.) >= () end |