Passei algum tempo pesquisando a documentação sobre conjuntos e o problema que você Os operadores de set (como &
) realmente funcionam apenas com dados do mesmo tipo ... assim, você pode pedir a interseção de um DN e um DN, ou um valor de atributo e uma string, mas interseções de coisas de diferentes tipos não fazem sentido.
Então, criamos uma string usando o atributo isAdmin
e as maravilhas da concatenação de strings, assim:
olcAccess: {1}to dn.regex="o=([^,]+),ou=cust,dc=some,dc=domain$"
by set.expand="([admin=] + user/isAdmin + [,] + user/-1) & ([admin=TRUE] + [,o=$1,ou=cust,dc=some,dc=domain])" write
by * break
Observe o usuário de set.expand
, porque queremos usar $1
na definição do conjunto e observe o uso de [...]
para colocar valores literais nas sequências que estamos avaliando.
Para alguém conectado como minion1
, isso solicitará a interseção de:
admin=TRUE,o=mycompany,ou=cust,dc=some,dc=domain
e o valor literal:
admin=TRUE,o=mycompany,ou=cust,dc=some,dc=domain
Qual é um conjunto não vazio, então funciona. Para alguém com isAdmin=FALSE
(ou nenhum atributo isAdmin
), a comparação seria com admin=FALSE,...
ou admin=,...
. Da mesma forma, para alguém que não esteja na mesma organização o=...
do destino, a interseção produzirá um conjunto vazio.
Se você estiver interessado, isso é o que eu realmente usei para testar. Eu estou usando employeeType
em vez de isAdmin
porque eu não queria mexer com a adição de um novo atributo ao meu esquema.
Além disso, slapd -dacl ...
é seu amigo.