Страхотен въпрос!
Първо, нека направим някои предположения за "по-добро".
Предполагам, че не ви пука особено за дисковото пространство – битмаската е ефективна от гледна точка на пространството, но не съм сигурен, че това има голямо значение, ако използвате SQL сървър.
Предполагам, че ти пука за скоростта. Една битова маска може да бъде много бърза при използване на изчисления - но няма да можете да използвате индекс, когато отправяте заявка към битовата маска. Това не би трябвало да има толкова голямо значение, но ако искате да знаете кои потребители имат създаване на достъп, вашата заявка ще бъде нещо като
select * from user where permsission & CREATE = TRUE
(нямате достъп до SQL Server днес, на път). Тази заявка няма да може да използва индекс поради математическата операция - така че ако имате огромен брой потребители, това би било доста болезнено.
Предполагам, че ви е грижа за поддръжката. От гледна точка на поддръжка, битмаската не е толкова изразителна, колкото основния проблемен домейн, колкото съхраняването на изрични разрешения. Почти сигурно ще трябва да синхронизирате стойността на флаговете на bitmask между множество компоненти - включително базата данни. Не невъзможно, но болка в гърба.
Така че, освен ако няма друг начин за оценка на "по-добро", бих казал, че маршрутът на битовата маска не е толкова добър, колкото съхраняването на разрешенията в нормализирана структура на базата данни. Не съм съгласен, че би било „по-бавно, защото трябва да направите присъединяване“ – освен ако нямате напълно нефункционална база данни, няма да можете да измерите това (докато заявките без ползата от активен индекс може да стане забележимо по-бавно дори с няколко хиляди записа).