Federico M. Iachetti retweeted
Today’s giveaway: A copy of LOCKDOWN Protocol on Steam for you or a friend!
How to enter:
1️⃣ Like
2️⃣ Follow
3️⃣ Retweet
⏳ Contest ends tomorrow🎁
Federico M. Iachetti retweeted
Today’s prize: Contrast Skin for LOCKDOWN Protocol!
How to enter:
1️⃣ Like
2️⃣ Follow
3️⃣ Retweet
⏳ 3 winners will be announced tomorrow!
Good Luck!
Federico M. Iachetti retweeted
🎮 Giveaway Alert!
🏆 Prizes:
1st Prize: A copy of LOCKDOWN Protocol + Tiphanie + Contrast + Winter Sweaters Skins.
2nd Prize: 4 winners get the Winter Sweaters Skin.
How to Enter:
- Follow us
- Like this post
- Retweet
Winners will be announced on December 28.
Good luck!
Federico M. Iachetti retweeted
Today, you have a chance to win Tiphanie, a fashionable atronaut who knows that it’s all about standing out with style!
How to enter:
1️⃣ Like this tweet
2️⃣ Follow us
3️⃣ Retweet
⏳ 5 winners will be announced in 24 hours, good luck!
Federico M. Iachetti retweeted
Lo último en la Academia 10Pines, los micro-workshops!
No te pierdas la próxima edición abierta!
Hoy terminamos los micro-workshops de cómo no usar null, no romper el encapsulamiento y cómo sacar código repetido en MailAmericas
Si te interesa ver estos temas de manera bien práctica y en 2 horas, te recomiendo las ediciones online y abiertas: academia.10pines.com/
Federico M. Iachetti retweeted
🎓 En nuestro nuevo curso "Introducción a TDD" definiremos el marco conceptual y programaremos juntos para que veas los beneficios de TDD en acción. ¡Empieza tu viaje hacia un mejor código hoy mismo!
Federico M. Iachetti retweeted
Nuevos micro-talleres de diseño de software en #Academia.10Pines! 💻
Para más info ingresa en: academia.10pines.com/
Estoy muy contento de anunciar un nuevo modelo de capacitación de micro-workshops donde atacaremos de manera práctica, un problema concreto de diseño de software en 2hrs
Hay tres micro-workshops en agenda, el primero sobre "No usar null/nil"
Registrate en: academia.10pines.com/
Federico M. Iachetti retweeted
Estoy muy contento de anunciar un nuevo modelo de capacitación de micro-workshops donde atacaremos de manera práctica, un problema concreto de diseño de software en 2hrs
Hay tres micro-workshops en agenda, el primero sobre "No usar null/nil"
Registrate en: academia.10pines.com/
yo lo terminé hoy. Vale la pena
¡Nuevo curso en #Academia10Pines! 🎓
⚡ Presentamos ¨Heurísticas de Diseño de Software con Objetos¨ dictado por @HernanWilkinson . ⚡
💡 ¿Querés diseñar software del que estés orgulloso, que sea robusto frente a los errores, entendible y "lindo"?
cursos.10pines.com/p/heurist…
Federico M. Iachetti retweeted
¡Nuevo curso en #Academia10Pines! 🎓
⚡ Presentamos ¨Heurísticas de Diseño de Software con Objetos¨ dictado por @HernanWilkinson . ⚡
💡 ¿Querés diseñar software del que estés orgulloso, que sea robusto frente a los errores, entendible y "lindo"?
cursos.10pines.com/p/heurist…
Federico M. Iachetti retweeted
¿Por qué no hay que usar null/nil?
Si te interesa saber por qué y cómo evitarlo, no dejes de tomar nuestro curso de heurísticas de diseño: cursos.10pines.com/p/heurist…
youtu.be/6UsoucOk-t0
Federico M. Iachetti retweeted
I didn't have time to write you a short answer, so I wrote you a long one
- Often people feel the desire to have "attribute-level" validations because they don't have enough controllers. The 1:1 mapping of resource and controller is great early on but it is actively harmful if you have two different user roles doing different operations on an object through the same controller endpoint. Just because you are editing columns on the `invoices` table does not mean that you should do it through `invoices#update`. If only admins can backdate an invoice, do that through `invoices/backdate#create` and authorize there. It will be super clear and confident.
- A whole class of authorization goes away if you scope things to the current tenant / user with `Current.account.invoices.find(params[:id])`. In a SaaS project it should be a huge yellow flag when you are querying models directly. You can take this a step further too: `Current.user.backdateable_invoices.find(id)` where non-admins get `Invoice.none` returned
- I find gems like Pundit/ActivePolicy/CanCanCan etc to be a net negative: authorization code should be first and foremost extremely clear and explicit. DSLs and conventions that reduce character count obscure this and are surface area for nasty bugs.
Again if you have more targeted controllers, it doesn't matter that you have some extra code to authorize. And less gems means less chance of getting blocked on a Rails upgrade, less external updates to manage, less bikeshedding over people wanting to use their pet favorite.
- Favor UI patterns that make it hard for users to do things they don't have permission to do. If you can't backdate an invoice because of permissions, don't show the Backdate button. Or show it disabled with text explaining that you dont have permissions. Keep the backend checks, of course, but let it just blow up with a generic 500. Avoid showing every user the form and then doing inline form validation errors. If you look at 37s code, they have almost no validations. Rails inline form validations are very limited and frankly kind of suck to configure -- don't reach for a different form builder, just realize you probably shouldn't be using them that much.
- For any complex permission schemes, you will want to implement "role-based access control" (RBAC is what you want to search for). User has_many :roles, Role has_many :permissions, Permission is what you check for authorizations. Making these database tables (even if you think it's overkill) is really nice in the future since eventually accounts will want custom roles and custom configurations of permissions.
Again don't reach for gems for this. You will be glad that you have full control over the system when you need to migrate/deprecate/add strange behaviors/etc as your needs change.
- One last note: how do you authorize when changes are made via an API or a third-party integration or a webhook? You don't know what `User` is actually doing it. So if you bake authorization checks deep into the model, you'll end up creating mess as you have to make fake user records or pass flags to skip checks. Another +1 for controllers as the primary point to authorize IMO
Usually people write a blog post to share something they learn. I'm flipping that. I need you to teach me something.
Know anything about authorization? Help me out...
bjessbrown.com/authorization…
hi @r00k. Tuple question. Is App Veil not available on Linux? I'm trying to configure it, but I can't find the option on my settings. Thanks
Federico M. Iachetti retweeted
En marzo estaremos dando los cursos abiertos/online de “Construcción de Software Robusto con TDD” y “Diseño Avanzado de Software con Objetos I”
¡No te los pierdas!
Más info en: academia.10pines.com/
Federico M. Iachetti retweeted
Recomendado
En marzo estaremos dando los cursos abiertos/online de “Construcción de Software Robusto con TDD” y “Diseño Avanzado de Software con Objetos I”
¡No te los pierdas!
Más info en: academia.10pines.com/




















