я не могу дать рекомендации нужно-ли менять существующую систему.
Misha v.3 15.07.2004 17:11
я не знаю насколько она вас не устраивает.
очень может быть что моя система (кстати в плане работы с правами она использовалась мной не так уж много раз, поэтому возможны глюки в этих методах) хотя и имеет потенциально больше возможностей, но для ваших нужд будет годиться ещё меньше ввиду того, что вам нужно будет написать административные механизмы раздачи прав, но при этом возможности будут невостребованы.
ваша система однозначно менее рессурсоемка ввиду меньших возможностей. например в моей системе чтобы понять можно-ли показывать пользователю U документ по урлу /A/B/C/ приходится доставать все права данного пользователя и групп в которых он состоит на все объекты A, B и С и затем заниматься вычислениями (правда есть кеширование вычисленных значений), что сложнее чем у вас. зато в моей системе есть наследование прав (у вас это тоже можно сделать, но тогда вы получите почти тоже самое что сейчас есть у меня :) )
ещё, насколько я понял, у вас есть только два состояния: "документ доступен пользователю" или "документ не доступен пользователю". у меня собственно на каждый объект может быть дано большое количество разнообразных прав. кратко: Supervisory (можно все), Browse (виден в навигации), Create (можно создавать дочерние объекты), Delete (можно удалять), Modify (можно редактировать), Access control (можно давать права другим), Read (можно читать данные объекта), Write (можно изменять данные объекта). на самом деле у меня прав больше, к тому-же как вы заметили тут их только 8 (используется 8 бит, а зарезервировано в БД int - 32 бит)
я использую битовые операции которые работают очень быстро, а вы - десятичные операции, с которыми в данном случае человеку работать нагляднее, но программе - сложнее (медленнее). предлагаю посмотреть в методе getRightsToObject как происходят битовые манипуляции.