google-code-export / ruby-activeldap

Automatically exported from code.google.com/p/ruby-activeldap
Other
1 stars 1 forks source link

Problems with assotiations #42

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
What steps will reproduce the problem?
1. Define Objects in OpenLDAP:

class Employee < ActiveLdap::Base
ldap_mapping :dn_attribute => "uid",
:classes => ["inetOrgPerson", "posixAccount"],
:prefix => "ou=People"
belongs_to :groups, :class_name => 'Group', :many => 'uniqueMember',
:primary_key => 'dn'

class Group < ActiveLdap::Base
ldap_mapping :dn_attribute => "cn", :classes => ["groupOfUniqueNames"],
:prefix => "ou=Groups"
has_many :employees, :class_name => "Employee", :wrap => "uniqueMember",
:primary_key => 'dn'
has_many :externals, :class_name => "External", :wrap => 'uniqueMember',
:primary_key => 'dn'
has_many :nested_groups, :class_name => "Group", :extend => "uniqueMember",
:primary_key => 'dn'

class External < ActiveLdap::Base
ldap_mapping :dn_attribute => "cn",
:classes => ["inetOrgPerson"],
:prefix => "ou=People,ou=Externals,ou=Accounts"
belongs_to :clients, :class_name => 'Client', :primary_key => 'o'
belongs_to :groups, :class_name => 'Group', :many => 'uniqueMember',
:primary_key => 'dn'

class Client < ActiveLdap::Base
ldap_mapping :dn_attribute => "o", :classes => ["organization"],
:prefix => "ou=Clients,ou=Externals,ou=Accounts", :scope => :one
has_many :externals, :class_name => "External", :foreign_key => 'o'

2. Get groups employees (members):
Group.new("some_group_with_unique_members").employees

What is the expected output? What do you see instead?

I should get some employees (if defined) but what I'm getting is nil.
There is some issue with creating ldap query - openldap log give me:

Mar 18 13:59:35 tandetny slapd[9991]: conn=0 op=0 RESULT tag=97 err=0 text=
Mar 18 13:59:35 tandetny slapd[9991]: conn=0 op=1 SRCH
base="ou=Groups,dc=power,dc=com,dc=pl" scope=2 deref=0
filter="(&(&(objectClass=pmUser)(cn=admins*))(&(objectClass=groupOfUniqueNames))
)"
Mar 18 13:59:35 tandetny slapd[9991]: conn=0 op=1 SEARCH RESULT tag=101
err=0 nentries=1 text=
Mar 18 13:59:35 tandetny slapd[9991]: conn=0 op=2 SRCH
base="ou=People,dc=power,dc=com,dc=pl" scope=2 deref=0
filter="(&(uid=ktomczyk,ou=people,dc=som,dc=com=)(&(objectClass=inetOrgPerson)(o
bjectClass=posixAccount)))"
Mar 18 13:59:35 tandetny slapd[9991]: conn=0 op=2 SEARCH RESULT tag=101
err=0 nentries=0 text=

There are some '=' sign added at end of search query for employee

Original issue reported on code.google.com by czy...@gmail.com on 18 Mar 2010 at 1:07

GoogleCodeExporter commented 9 years ago
ok, seems to be ok, :primary_key is used for something else, but I still don't 
know
for what - there is no docs

Original comment by czy...@gmail.com on 18 Mar 2010 at 1:12

GoogleCodeExporter commented 9 years ago
now I have other problem:
Changing:
class Employee < ActiveLdap::Base
ldap_mapping :dn_attribute => "uid",
:classes => ["inetOrgPerson", "posixAccount"],
:prefix => "ou=People"
belongs_to :groups, :class_name => 'Group', :many => 'uniqueMember',

group.members now returns everything - even externals

Original comment by czy...@gmail.com on 18 Mar 2010 at 1:16

GoogleCodeExporter commented 9 years ago
What is "group.members"? Is it "group.employees"?

We can't reproduce your case without test data.
Could you show your test data? e.g.:

  >> require 'pp'
  >> puts group.to_ldif
  >> pp group.employees.collect(&:to_ldif)
  >> pp group.externals.collect(&:to_ldif)
  >> pp Employee.all.collect(&:to_ldif)
  >> pp External.all.collect(&:to_ldif)

Original comment by kou...@gmail.com on 21 Mar 2010 at 11:59