35 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
		
		
			
		
	
	
			35 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| 
								 | 
							
								module  OrbitCoreLib
							 | 
						||
| 
								 | 
							
								  module  ObjectAuthable
							 | 
						||
| 
								 | 
							
								    def self.included(base)
							 | 
						||
| 
								 | 
							
								      base.instance_eval("has_many :object_auths,as: :obj_authable,dependent: :delete")
							 | 
						||
| 
								 | 
							
								      
							 | 
						||
| 
								 | 
							
								      base.define_singleton_method :authed_for_user do |user,title = nil|
							 | 
						||
| 
								 | 
							
								        sub_role_ids_ary=user.sub_roles.collect{|t| t.id}
							 | 
						||
| 
								 | 
							
								        if title.nil?
							 | 
						||
| 
								 | 
							
								          auth_object_space = ObjectAuth.where(obj_authable_type: self.to_s)
							 | 
						||
| 
								 | 
							
								        else
							 | 
						||
| 
								 | 
							
								          auth_object_space = ObjectAuth.where(obj_authable_type: self.to_s,title: title)
							 | 
						||
| 
								 | 
							
								        end
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								        query1 = auth_object_space.any_in({sub_role_ids: sub_role_ids_ary}).excludes(blocked_user_ids: user.id)
							 | 
						||
| 
								 | 
							
								        query2 = auth_object_space.any_of({all: true},{privilege_user_ids: user.id},{role_ids: user.role.id}).excludes(blocked_user_ids: user.id)
							 | 
						||
| 
								 | 
							
								        result = (query1 + query2).uniq
							 | 
						||
| 
								 | 
							
								        result.collect{|t| t.obj_authable}
							 | 
						||
| 
								 | 
							
								      end
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    def authed_users(title=nil)
							 | 
						||
| 
								 | 
							
								      users = []
							 | 
						||
| 
								 | 
							
								      unless title.nil?
							 | 
						||
| 
								 | 
							
								        users = self.object_auths.where(title: title )[0].auth_users_after_block_list rescue []
							 | 
						||
| 
								 | 
							
								      else
							 | 
						||
| 
								 | 
							
								        users = self.object_auths.collect{|t| t.auth_users_after_block_list} rescue []
							 | 
						||
| 
								 | 
							
								        users.flatten!.uniq!
							 | 
						||
| 
								 | 
							
								      end
							 | 
						||
| 
								 | 
							
								      users
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								end
							 |