BookStack 在使用 AD 验证后,还可以将角色与 AD 的群组做串接,以简化群组成员异动的工作,不过在使用跟设定上,有些地方需要留意,虽然都是小问题,但我自己花了一两周的时间才找出原因,因此整理出来分享。
依照官方说明,先将 .env 档加入以下设定值:
# Enable LDAP group sync, Set to 'true' to enable. LDAP_USER_TO_GROUPS=true # LDAP user attribute containing groups, Defaults to 'memberOf'. LDAP_GROUP_ATTRIBUTE="memberOf" # Remove users from roles that don't match LDAP groups. LDAP_REMOVE_FROM_GROUPS=false
完成設定後,以下面环境为例设定:
AD / BookStack 帐号: test
BookStack 角色: 测试BS组
AD 群组: 测试广告组
在 BookStack 新增一个角色 “测试BS组”,并在其「外部身份验证ID」输入 “测试广告组”。
当 AD 中 ”测试广告组” 成员 “test” 帐号登入 BoookStack 时,会自动将其带进 “测试BS组” 角色。
【注意】
◎ BookStack 的AD群组机制是把 BookStack 既有的角色跟 AD 群组串起来,而不是复制 AD 群组到 BookStack。
◎ AD 群组名称可以包含底线 ”_” 或减 “-“,但不可以有空白,也不能是中文。
◎ AD 成员帐号若为 AD 群组的孙成员,一样可以被带进连结的角色 (子群组的名称也不能有空白及中文)。
测试没问题后,若希望 AD 在异动群组成员时,BookStack 能同步调整角色成员,请进行下列设定:
1. 在 AD 新增自定义管理者群组,例:BS_Admin。
2. 将 AD 管理者帐号 administrator 加入到 BS_Admin。
3. 修改 BookStack 的 Admin 角色,在「外部身份验证ID」栏位输入 BS_Admin。
4. 修改 .env,将 LDAP_REMOVE_FROM_GROUPS 改成 true。
【注意】
◎ 1~3的步骤要先进行,才能修改步骤4的值,否则 BookStack 的 admin 角色成员会被清空,造成没有任何帐号有管理权限。
◎如不幸发生上述情形,需连进资料库,修改 “roles” table ,将 admin 角色的 external_auth_id 栏位,输入 AD 自定义的管理者群组名称 (如 BS_Admin)。
【相關資料】
- v0.23.2 // (AD) LDAP & “默认用户角色”… 也, 多个ldap_user_filter项? · 问题 #973 ·BookStackApp / BookStack·GitHub
- LDAP组同步如何工作·问题 #1059 ·BookStackApp / BookStack·GitHub