На днях по случаю увидел один пост, посвященный реализации контроля доступа в Node.js, и предложенный вариант меня немного удивил. После просмотра реализации "ролей" я понял в каком ключе написано все остальное, пролистал пост до конца и был удивлен еще больше - автор поста пишет книги по безопасности Node.js приложений! Тут "Остапа понесло" и я решил прокомментировать промо этого поста: "It could be implemented much easier using bit masks".
Первое что приходит на ум на тему управления доступом на основе ролей это битовые маски.
Пример, приведенный мной в ответ на непонимание автора о чем речь в моем комментарии:
Easy peasy lemon squeezy: никаких class, inherits, indexOf и т.п.
В итоге автор встал в позицию "мой код круче", как-будто я пытался доказать ему обратное... и эти люди запрещают мне ковырять в носу :)
Первое что приходит на ум на тему управления доступом на основе ролей это битовые маски.
Пример, приведенный мной в ответ на непонимание автора о чем речь в моем комментарии:
var read = parseInt('001', 2); var write = parseInt('010', 2); var publish = parseInt('100', 2); var can = (...arr) => arr.reduce((n, int) => n | int, 0); var guest = can(read); var writer = can(read, write); var manager = can(read, write, publish); var hasRightsTo = (right) => (role) => !!(role & right); var hasRightsToRead = hasRightsTo(read); var hasRightsToWrite = hasRightsTo(write); var hasRightsToPublish = hasRightsTo(publish); hasRightsToRead(guest); // true hasRightsToRead(writer); // true hasRightsToRead(manager); // true hasRightsToWrite(guest); // false hasRightsToWrite(writer); // true hasRightsToWrite(manager); // true hasRightsToPublish(guest); // false hasRightsToPublish(writer); // false hasRightsToPublish(manager); // true
Easy peasy lemon squeezy: никаких class, inherits, indexOf и т.п.
В итоге автор встал в позицию "мой код круче", как-будто я пытался доказать ему обратное... и эти люди запрещают мне ковырять в носу :)
Комментариев нет:
Отправить комментарий
Комментарий будет опубликован после модерации