2016-05-06 9 views
0

私はRC#386に自営認証システムベースを持っています。私はGuestPermissionクラスとMemberPermisionクラスの間で多くの複製に気付いた。クラス継承が期待どおりに継承されない

class GuestPremission < BasePermission 
    allow_action :static, [:about, :careers, :contact, :help, :home] 
end 

class MemberPermission < BasePermission 
    allow_action :static, [:about, :careers, :contact, :help, :home] 
end 

の両方がBasePermissionから継承します。私はこのように、代わりにGuestPermissionから継承するMemberPermissionクラスをリファクタリングしたい:

class GuestPermission < BasePermission 
    allow_action :static, [:about, :careers, :contact, :help, :home] 
end 

class MemberPermission < GuestPermission 
    ... 
end 

理想的には、これはすでにに付与し、GuestPermissionに存在しているMemberPermissionで重複を減らす必要があります。しかし、私は再帰的なエラー:filter chain haled as :authorize rendered or redirectedを取得します。

これは通常、要求されたコントローラ#アクション(この場合はstatic#home)が暗黙的に承認されていないことを示しています。しかし、この場合は、GuestPermissionから継承する必要があります。

これを修正してアクセス許可の重複が不要になるようにするためのアイデアはありますか?

答えて

0

あなたはこの、使用レールの懸念のようにそれを行うことができます: `MemberPermission

module Xxx 
    extend ActiveSupport::Concern 
    included do 
     class_eval do 
     allow_action :static, [:about, :careers, :contact, :help, :home]  
     end 
    end 
end 

class GuestPremission < BasePermission 
    include Xxx 
end 

class MemberPermission < BasePermission 
    include Xxx 
end 
+0

はそれをすべてのトリクルダウンではないでしょうか?あなたのソリューションは実際に複製を減らすわけではありません。 – Matteo