Добрый день!
Спасибо, обстоятельно написано, но разрешите дополнить/скорретировать…
Немного поспорю с этим. Если НЕ создавать ACL для всех полей, но создать разрешающую ACL на уровне конкретного поля, то это ограничит доступ к этому конкретному полю, не трогая доступа к остальным полям. Т.е. вариант “прописать ACL на уровне конкретного поля без ACL для всех полей” - вполне рабочий вариант. И именно так делаю, когда надо ограничить доступ к парочке конкретных полей, оставив доступ ко всем остальным полям. Да и в коробке вижу такие примеры.
А указанный вариант годится лишь для тех случаев, когда нужно разрешить доступ только к ограниченному количеству выбранных полей, запретив доступ ко всем остальным.
И вот здесь уже совсем не верный вариант. Если “нужно ограничить доступ на часть полей”, то ACL с запретом на все поля не требуется. Достаточно прописать ACL на уровне конкретных полей.
Ещё полезно было бы узнать, зачем в коробке используются ACL со скриптом “answer = true;”? Ведь пустой скрипт - это и так ведь true…
Да и “answer = false;” тоже заслуживает отдельного внимания.
На каждом уровне (для каждого типа разрешения: read/create/т.д.), пока там нет ACL, действует правило “разрешено всё”. А как только появляется ACL, автоматически становится “запрещено всем, кроме условий, указанных в ACL”. А если появляется ACL со скриптом “answer = false;”? Т.е. единственная ACL на каком-то уровне, скажем, для write, и она - со скриптом “answer = false;”? В этом случае, насколько понимаю, совершенно неважно, какие условия будут прописаны в этом ACL (помимо скрипта), потому что это просто будет “write запрещено всем и при любых условиях”, т.к. добавленная ACL разрешения не даёт, а всему остальному тоже автоматически запрет идёт при появлении ACL на этом уровне. В коробке, в основном, действительно вижу, что “answer = false;” используется без всяких условий - просто для запрета на указанном уровне. Но есть и парочка с условиями, а вот этого уже не понимаю… Даже провёл эксперимент: добавил запрещающую ACL на одно поле с одним условием - в итоге, вне зависимости от условия, поле стало недоступным для изменения.