简体   繁体   English

获取在be9 acl9中应用了角色的对象的列表

[英]get a list of objects with roles applied in be9 acl9

I think in something like this: 我认为是这样的:

def self.obj_list(opts = {:include => [] , :exclude => []})
    # Returns an array with all objects with roles applied
    # +:exclude+:: (array,string) optional object type to exclude from list
    # +:include+:: (array,string) optional object type to include in list
    # Example:
    #   Role.obj_list(:include => ["Device", "User"])
    #   Role.obj_list(:exclude => ["User"])

    inc = opts[:include].to_a
    exc = opts[:exclude].to_a

    objs = []
    if inc.empty?

      self.all.each do |r|
        unless r.authorizable_type.nil?
          objs << r.authorizable_type.constantize.find(r.authorizable_id) unless exc.include?(r.authorizable_type)
        end
      end

    else

      self.all.each do |r|
        unless r.authorizable_type.nil?
          objs << r.authorizable_type.constantize.find(r.authorizable_id) if inc.include?(r.authorizable_type)
        end
      end

    end
    objs
  end

You can use where clauses to do the include/exclude stuff in SQL: 您可以使用where子句在SQL中执行包含/排除的操作:

( inc.empty?
? where.not( :authorizable_type => exc )
: where( :authorizable_type => inc )
).map(&:authorizable)

By using authorizable you will get Rails's own handling of polymorphic associations, which will ensure that only actual objects are returned, so there's no need to check for nil 通过使用authorizable您将获得Rails自己对多态关联的处理,这将确保仅返回实际的对象,因此无需检查nil

I don't know, maybe you want to link the object and subject? 我不知道,也许您想链接对象和主题? If is this, here are a tutorial for that: https://github.com/be9/acl9/wiki/tutorial:-linking-object-and-subject-with-hmt 如果是这样,这里有一个教程: https : //github.com/be9/acl9/wiki/tutorial : -linking-object-and-subject-with-hmt

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM