Laravel рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рднреВрдорд┐рдХрд╛рдПрдБ рдХреИрд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ: RBAC рдкреИрдХреЗрдЬреЛрдВ рдХрд╛ рдЕрд╡рд▓реЛрдХрди

рдПрдХ рд╡реЗрдм рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЦрд╛рддреЗ рд╣реИрдВ, рд╕рд╡рд╛рд▓ рдЕрдХреНрд╕рд░ рднреВрдорд┐рдХрд╛рдУрдВ рдФрд░ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреА рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдЖрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдЙрдарддрд╛ рд╣реИ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдХреБрдЫ рд╡рд░реНрдЧреЛрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рд░рджреНрдж рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдПрдХреНрд╕реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓ рдкреИрдХреЗрдЬ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╕рд╛рд░рд╛рдВрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред




рдкрд░рд┐рдЪрдп


5.1 рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рд▓рд╛рд░рд╡реЗрд▓ рдиреЗ рдПрдХреНрд╕реЗрд╕ рдЧреЗрдЯреНрд╕ рдХреЛ рдкреЗрд╢ рдХрд┐рдпрд╛, рдЬреЛ рдПрдХреНрд╕реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд┐рд▓реНрдЯ-рдЗрди рдлреНрд░реЗрдорд╡рд░реНрдХ рдлрдВрдХреНрд╢рди рд╣реИред рдЗрд╕ рд╕рдордп рддрдХ, рдореБрдЭреЗ рд╡рд┐рднрд┐рдиреНрди рддреГрддреАрдп-рдкрдХреНрд╖ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдм рднреА, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ: рд╕рдм рдХреБрдЫ рдЦреБрдж рд▓рд┐рдЦреЗрдВ рдпрд╛ рдХреБрдЫ рддреИрдпрд╛рд░ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдФрд░ рднреВрдорд┐рдХрд╛рдУрдВ рдХреА рдПрдХ рд╕рд░рд▓ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд╛рде рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдпрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓ рд╣реИред рджреВрд╕рд░рд╛ (рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╣реА рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде) рдЕрдзрд┐рдХ рдареАрдХ-рдЯреНрдпреВрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдореМрдЬреВрджрд╛ рд╕рдВрдХреБрд▓ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдирд╛ рд╣реИ рдЬреЛ RBAC (рднреВрдорд┐рдХрд╛ рдЖрдзрд╛рд░рд┐рдд рдЕрднрд┐рдЧрдо рдирд┐рдпрдВрддреНрд░рдг) - рднреВрдорд┐рдХрд╛-рдЖрдзрд╛рд░рд┐рдд рдЕрднрд┐рдЧрдо рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рдо рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рдХрд░ рджреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдЕрдВрддрд┐рдо рд╕рддреНрдп рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ: рдкреНрд░рддреНрдпреЗрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд╕реНрд╡рдпрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЙрд╕реЗ рдХрд┐рд╕ рдкреИрдХреЗрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдпрджрд┐ рдмрд┐рд▓реНрдХреБрд▓ рднреА)ред рдиреЛрдЯ: рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдЖрд░рдмреАрдПрд╕реА рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рдкреНрд░рд╣рд░реА рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ, рд╣рдо рдХреЗрд╡рд▓ рдЙрдкрд▓рдмреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рд╕реЗ рдирд┐рдкрдЯрддреЗ рд╣реИрдВред

рдкреИрдХреЗрдЬ рд╡рд┐рд╡рд░рдг


рд╕реНрдкреИрдЯреА рджреНрд╡рд╛рд░рд╛ рд▓рд╛рд░рд╡реЗрд▓-рдЕрдиреБрдорддрд┐


рд▓рд┐рдВрдХ: https://github.com/spatie/laravel-permission
рдкреНрд░рд▓реЗрдЦрди: https://docs.spatie.be/laravel-permission/v3
рдбрд╛рдЙрдирд▓реЛрдб рдХреА рд╕рдВрдЦреНрдпрд╛ (рд▓реЗрдЦрди рдХреЗ рд╕рдордп): 3.6 рдПрдо
рд▓рд╛рд░рд╡реЗрд▓ рд╕рдВрд╕реНрдХрд░рдг: рд╕рдВрд╕реНрдХрд░рдг 3 рдХреЗ рд▓рд┐рдП 5.8 рд╕реЗ
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐: рдирд╣реАрдВ (рдЖрдк рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)
рд▓рд╛рд░рд╡реЗрд▓ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░: рд╣рд╛рдБ

рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ
  1. рдЕрдзрд┐рдХрд╛рд░ рдмрдирд╛рдиреЗ / рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реАрдЧрд░-рдХрдорд╛рдВрдб рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ред
  2. рднреВрдорд┐рдХрд╛рдУрдВ рдФрд░ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдорд╛рдкреНрдд рдЧреБрдВрдЬрд╛рдЗрд╢ред
  3. рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдорд╛рдирдХ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ рдХрд┐ рдкреИрдХреЗрдЬ рд▓рд╛рд░рд╡реЗрд▓ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рдЧреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
  4. рдкреИрдХреЗрдЬ рдХреЗ рдмреНрд▓реЗрдб рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛: рднреВрдорд┐рдХрд╛ (@hasrole), @hasanyrole, @hasallroles, @unlessroleред
  5. рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдФрд░ рднреВрдорд┐рдХрд╛рдУрдВ рдХрд╛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рдиред

рдиреЛрдЯ: рдЬрдм рдкреНрд░рд╛рдзрд┐рдХреГрдд () рдХреЛ рдиреАрддрд┐ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрджрд┐ рдЕрдиреБрдорддрд┐ рдореЗрдВ рдиреАрддрд┐ рдХреЗ рд╕рдорд╛рди рдирд╛рдо рд╣реИ, рддреЛ рдпрд╣ рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛, рдиреАрддрд┐ рдирд╣реАрдВред

DB рд╕рдВрд░рдЪрдирд╛



рдХреЛрдб рдЙрджрд╛рд╣рд░рдг

//    $user->givePermissionTo('edit articles'); //    $user->assignRole('writer', 'admin'); //       $user->assignRole(['writer', 'admin']); //    $role->givePermissionTo('edit articles'); 


рдЬреЛрд╕реЗрдл рд╕рд┐рд▓реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдмрд╛рдЙрдВрд╕рд░


рд▓рд┐рдВрдХ: https://github.com/JosephSilber/bouncer
рдкреНрд░рд▓реЗрдЦрди: https://github.com/JosephSilber/bouncer#introduction
рдбрд╛рдЙрдирд▓реЛрдб рдХреА рд╕рдВрдЦреНрдпрд╛ (рд▓реЗрдЦрди рдХреЗ рд╕рдордп): 418K
рд▓рд╛рд░рд╡реЗрд▓ рд╕рдВрд╕реНрдХрд░рдг: 5.1.20 рд╕реЗ
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐: рдирд╣реАрдВ (рдЖрдк рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)
рд▓рд╛рд░рд╡реЗрд▓ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░: рд╣рд╛рдБ

рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ
  1. рд▓рд╛рд░рд╡реЗрд▓ рдХреЗ рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред
  2. рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдФрд░ рднреВрдорд┐рдХрд╛рдУрдВ рдХрд╛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рдиред
  3. рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ (рдореЙрдбрд▓ рдХреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдпрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдПред
  4. "рдЙрдирдХреА" рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХрд╛ рдореБрджреНрджрд╛: "toOwn" рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрдиреЗ рд╡рд╛рд▓реА рдЗрдХрд╛рдИ (user_id рдФрд░ $ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-> рдЖрдИрдбреА рдлрд╝реАрд▓реНрдб рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ) рдХреЗ рд╕рднреА рдЕрдзрд┐рдХрд╛рд░ рдЬрд╛рд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк "рдлрд╝рдВрдХреНрд╢рди" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджрд┐рдП рдЧрдП рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рд╕реАрдорд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  5. рдорд▓реНрдЯреАрдЯреЗрдиреЗрдВрд╕реА рд╕рдкреЛрд░реНрдЯ (рд╕реНрдХреЛрдк рдлрдВрдХреНрд╢рди рдкрд░ рдЖрдзрд╛рд░рд┐рдд)ред
  6. рд╕реНрдерд╛рдкрд┐рдд рд╕реНрдерд┐рддрд┐рдпреЛрдВ (рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднреВрдорд┐рдХрд╛рдУрдВ рдФрд░ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдЧреБрдВрдЬрд╛рдЗрд╢" рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдореЗрдВ рдЕрдзрд┐рдХрд╛рд░ рдФрд░ рд╕рд╛рдЗрдЯ рдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рднрд╛рдЧред
  7. рдХрдВрд╕реЛрд▓ рдХрд╛рд░реАрдЧрд░ рдХрдорд╛рдВрдб рдЕрдкреНрд░рдпреБрдХреНрдд рдЕрдиреБрдорддрд┐ рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
  8. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдпрд╛ рдкреНрд░рддрд┐рдмрдВрдз рд╣рдЯрд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ (рдирд┐рд╖рд┐рджреНрдз рдХреНрд╖рдорддрд╛)ред

рдиреЛрдЯ: рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдЗрд╕рдХреЗ рд▓рд┐рдП рднреВрдорд┐рдХрд╛ рдФрд░ рдЕрдзрд┐рдХрд╛рд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

DB рд╕рдВрд░рдЪрдирд╛



рдХреЛрдб рдЙрджрд╛рд╣рд░рдг

рдореЙрдбрд▓ рд╡рд░реНрдЧ рдпрд╛ рдЙрджрд╛рд╣рд░рдг рджреНрд╡рд╛рд░рд╛ рдЕрдзрд┐рдХрд╛рд░ рдХрд╛ рдкреНрд░рддрд┐рдмрдВрдз:
 Bouncer::allow($user)->to('edit', Post::class); Bouncer::allow($user)->to('edit', $post); 


"рдЙрдирдХреА" рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрд╛рд░ рдЬрд╛рд░реА рдХрд░рдирд╛:
 Bouncer::allow($user)->toOwn(Post::class)->to(['view', 'update']); 


рд╕рдВрддрд░реАрдЧреЛрд░рд░реНрдХ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рд░рдЯреНрд░рд╕реНрдЯ


рд▓рд┐рдВрдХ: https://github.com/santigarcor/laratrust
рдкреНрд░рд▓реЗрдЦрди: https://laratrust.santigarcor.me/
рдбрд╛рдЙрдирд▓реЛрдб рдХреА рд╕рдВрдЦреНрдпрд╛ (рд▓реЗрдЦрди рдХреЗ рд╕рдордп): 601K
рд▓рд╛рд░рд╡реЗрд▓ рд╕рдВрд╕реНрдХрд░рдг: ~ 6.0
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛: рдирд╣реАрдВ
рд▓рд╛рд░рд╡реЗрд▓ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░: рдирд╣реАрдВ

рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ
  1. рдпрд╣ ENTRUST ( https://github.com/Zizaco/entrust ) рдХрд╛ рдХрд╛рдВрдЯрд╛ рд╣реИ ред
  2. рдмреНрд▓реЗрдб рдХреЗ рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВред
  3. рдорд╛рдирдХ рд▓рд╛рд░рд╡реЗрд▓ рдХрдорд╛рдВрдб рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рдХрд╛рд░рдг, рдмреНрд▓реЗрдб рдирд┐рд░реНрджреЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ - рдЖрдкрдХреЛ $ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-> рдХреИрди ('рдПрдбрд┐рдЯ-рдпреВрдЬрд░') рдпрд╛ рдЕрдиреБрдорддрд┐ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
  4. рднреВрдорд┐рдХрд╛рдУрдВ / рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХрд╛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рдиред
  5. рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреНрд╖рдорддрд╛ - рдПрдХ рд╕рд╛рде рднреВрдорд┐рдХрд╛рдУрдВ рдФрд░ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХрд╛ рд╕рддреНрдпрд╛рдкрдиред
  6. рддреИрдпрд╛рд░ рд╣реИ рдорд┐рдбрд┐рд▓рд╡реЗрдпрд░ред
  7. рдЯреАрдореЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрд╣реБрд╡рд┐рдХрд▓реНрдкреАред


DB рд╕рдВрд░рдЪрдирд╛



рдХреЛрдб рдЙрджрд╛рд╣рд░рдг
    $user->hasRole(['owner', 'admin']); $user->can(['edit-user', 'create-post']); $user->hasRole('owner|admin'); $user->can('edit-user|create-post');   $user->owns($post) //   $post->user_id   $owner = new Role(); $owner->name = 'owner'; $owner->display_name = 'Project Owner'; // optional $owner->description = 'User is the owner of a given project'; // optional $owner->save(); 


рдХрд╛рд░реНрдЯреЗрд▓рд┐рд╕реНрдЯ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╣рд░реА


рд▓рд┐рдВрдХ: https://github.com/cartalyst/sentinel
рдкреНрд░рд▓реЗрдЦрди: https://cartalyst.com/manual/sentinel/3.x
рдбрд╛рдЙрдирд▓реЛрдб рдХреА рд╕рдВрдЦреНрдпрд╛ (рд▓реЗрдЦрди рдХреЗ рд╕рдордп): 957K
рд▓рд╛рд░рд╡реЗрд▓ рд╕рдВрд╕реНрдХрд░рдг: 6.2
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛: рдирд╣реАрдВ
рд▓рд╛рд░рд╡реЗрд▓ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░: рдирд╣реАрдВ

рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ
  1. рдЗрд╕рдореЗрдВ рди рдХреЗрд╡рд▓ рднреВрдорд┐рдХрд╛рдПрдВ рдФрд░ рдЕрдзрд┐рдХрд╛рд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдкрдВрдЬреАрдХрд░рдг рд╕реЗ рдЬреБрдбрд╝реА рд╕рднреА рдЪреАрдЬреЗрдВ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
  2. рдкреИрдХреЗрдЬ рдЕрдЬреНрдЮреЗрдп рдврд╛рдВрдЪрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреНред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХреЗрд╡рд▓ рд▓рд╛рд░рд╡реЗрд▓ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рд╕рдВрдЧреАрддрдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдкреНрд░рдмреБрджреНрдз / рдбреЗрдЯрд╛рдмреЗрд╕, рд░реЛрд╢рди / рдШрдЯрдирд╛рдУрдВ, рд╕рд┐рдореНрдлрдиреА / http-рдиреАрдВрд╡ред
  3. рд╕реЗрдВрдЯрд┐рдирд▓ рдПрдХреНрд╕рдкрд╛рдпрд░-рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдРрдб-рдСрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рд╕рдордп рдкрд░ рдЕрдзрд┐рдХрд╛рд░ рдЬрд╛рд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  4. рд╕реЗрдВрдЯрд┐рдирд▓ рдорд▓реНрдЯреАрдЯреИрдиреЗрдВрд╕реА рдРрдб-рдСрди рдХреЗ рд╕рд╛рде рдорд▓реНрдЯреАрдЯреЗрдиреЗрдВрд╕реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдиреЛрдЯ: рд╢реБрджреНрдз Laravel 6.2 рдФрд░ PostgreSQL рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдПрдХ рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрд╛рд▓рд┐рдХрд╛ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдкрдХреЛ рдорд╛рдирдХ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛:



DB рд╕рдВрд░рдЪрдирд╛



рдХреЛрдб рдЙрджрд╛рд╣рд░рдг

 //   $user = Sentinel::findById(1); $role = Sentinel::findRoleByName('Subscribers'); $role->users()->attach($user); //   $admin = Sentinel::inRole('admin'); //   $user->permissions = [ 'user.create' => true, 'user.delete' => false, ]; $user->save(); //   $user->hasAccess(['user.create', 'user.update']); Sentinel::hasAnyAccess(['user.admin', 'user.update']); 


рд▓реЙрдбрд╡реЗрд▓-рдПрд╕реАрдПрд▓ рджреНрд╡рд╛рд░рд╛ рдХреЛрдбреАрди


рд▓рд┐рдВрдХ: https://github.com/kodeine/laravel-acl
рдкреНрд░рд▓реЗрдЦрди: https://github.com/kodeine/laravel-acl/wiki
рдбрд╛рдЙрдирд▓реЛрдб рдХреА рд╕рдВрдЦреНрдпрд╛ (рд▓реЗрдЦрди рдХреЗ рд╕рдордп): 170K
рд▓рд╛рд░рд╡реЗрд▓ рд╕рдВрд╕реНрдХрд░рдг: 5.0 рдФрд░ рдЙрдЪреНрдЪрддрд░
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛: рдирд╣реАрдВ
рд▓рд╛рд░рд╡реЗрд▓ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░: рдирд╣реАрдВ

рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ
  1. рднреВрдорд┐рдХрд╛рдУрдВ рдФрд░ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХрд╛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рдиред
  2. рд╡рдВрд╢рд╛рдиреБрдЧрдд рдЕрдзрд┐рдХрд╛рд░ред
  3. рдЖрдкрдХреЗ рдмреНрд▓реЗрдб рдХреЗ рдирд┐рд░реНрджреЗрд╢: рднреВрдорд┐рдХрд╛ , рдЕрдиреБрдорддрд┐ ред
  4. рддреИрдпрд╛рд░ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ред

рдиреЛрдЯред рдкреНрд░рд╡рд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рдФрд░ рд╕рдорд╛рдзрд╛рди:

  • Config / acl рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдЖрдкрдХреЛ рд╕реНрдерд┐рд░ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП user_table рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред
  • рдЖрдкрдХреЛ рдорд╛рдирдХ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЗ рд╕рд╛рде "рдорд┐рддреНрд░ рдмрдирд╛рдиреЗ" рдХреЗ рд▓рд┐рдП, рд╢реБрджреНрдз рд▓рд╛рд░рд╡реЗрд▓ рдкрд░ "рд╕рд┐рджреНрдзрд╛рдВрдд / рд╕реБрд╕реНрдд" рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╕рдордп рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИред

DB рд╕рдВрд░рдЪрдирд╛



рдХреЛрдб рдЙрджрд╛рд╣рд░рдг
 //   $permissionInternship = Permission::create([ 'name' => 'internships', 'slug' => [ //   'create' => true, 'view' => true, 'update' => true, 'delete' => true, ], 'description' => 'manage internships' ]); $permissionStudent = Permission::create([ 'name' => 'internships.student', 'slug' => [ //     'create' => false, ], //   'inherit_id' => $permissionInternship->getKey(), 'description' => 'student internship permissions' ]); 


рдорддреЗрд░рд╕ рдЬрдВрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рд░рд╡реЗрд▓-рдПрд╕рдПрд▓


рд▓рд┐рдВрдХ: https://github.com/mateusjunges/laravel-acl
рдкреНрд░рд▓реЗрдЦрди: https://mateusjunges.imtqy.com/laravel-acl/
рдбрд╛рдЙрдирд▓реЛрдб рдХреА рд╕рдВрдЦреНрдпрд╛ (рд▓реЗрдЦрди рдХреЗ рд╕рдордп): 1.8K
рд▓рд╛рд░рд╡реЗрд▓ рд╕рдВрд╕реНрдХрд░рдг: 5.0 рдФрд░ рдЙрдЪреНрдЪрддрд░
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛: рд╣рд╛рдБ (рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдлреЙрд░реНрдо)
рд▓рд╛рд░рд╡реЗрд▓ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░: рдирд╣реАрдВ

рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ
  1. рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреА рдЧреБрдВрдЬрд╛рдЗрд╢ред
  2. рд╕рдореВрд╣реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХрд╛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рдиред
  3. рдЖрдкрдХреЗ рдмреНрд▓реЗрдб рдХреЗ рдирд┐рд░реНрджреЗрд╢ рд╣реЛрдиреЗ рдкрд░: рд╕рдореВрд╣ , @elsegroup, рдЕрдиреБрдорддрд┐ , @elsepermission, @ allpermission, @ allgroups, @anypermission, @anygroup
  4. рдХрд╛рд░реАрдЧрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдореВрд╣реЛрдВ / рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╛рде рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрдорд╛рдВрдб рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ред
  5. рд░реЗрдбреАрдореЗрдб рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛: PermissionMiddleware, GroupMiddleware, HierarchicalPien, PermissionOrGroupMiddlewareред
  6. рднреВрдорд┐рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкреЛрдВ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ред

DB рд╕рдВрд░рдЪрдирд╛



рд╕рд╛рд░рд╛рдВрд╢ рддрд╛рд▓рд┐рдХрд╛





рдирд┐рд╖реНрдХрд░реНрд╖


рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкреИрдХреЗрдЬ рдХреЗ рдкрд╛рд╕ рдЖрд╡реЗрджрди рдХрд╛ рдЕрдкрдирд╛ рдХреНрд╖реЗрддреНрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рдПрдХ рд╡рд┐рдЬреЗрддрд╛ рдХреЛ рдЪреБрдирдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рд╣рдорд╛рд░реЗ рдЕрдиреБрдорд╛рдиреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд▓рд╛рд░рд╛рд╡реЗрд▓-рдЕрдиреБрдорддрд┐ рдФрд░ рдмрд╛рдЙрдВрд╕рд░ рдПрдХ рдЬрдЯрд┐рд▓ рднреВрдорд┐рдХрд╛ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рд╕рд╛рде рдХреЛрдбреАрди рджреНрд╡рд╛рд░рд╛ рд▓рд╛рд░рд╡реЗрд▓-рдПрд╕реАрдПрд▓ рдореЗрдВ рднреВрдорд┐рдХрд╛рдУрдВ рдХрд╛ рдПрдХ рдкрджрд╛рдиреБрдХреНрд░рдо рд╣реИред рдореЗрдЯрд╕ рдЬреБрдВрдЧреЗрд╕ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рд░рд╡реЗрд▓-рдПрд╕реАрдПрд▓ рдПрдХ "рддрд╛рдЬрд╛" рд╡рд┐рдХрд▓реНрдк рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рднреВрдорд┐рдХрд╛рдУрдВ рдХреЗ рдПрдХ рдордзреНрдпрдо рд╕реЗрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИред рднреВрдорд┐рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рд╣рд░реА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдорд╛рдзрд╛рди рд╣реИред рд▓рд╛рд░рдЯреНрд░рд╕ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдПрдВрдЯреНрд░рд┐рд╕ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреЛрдИ рдорд╛рдирдХ Laravel рдЯреВрд▓ - рдЧреЗрдЯреНрд╕ рдФрд░ рдиреАрддрд┐рдпреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред рд╡реЗ рдЙрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЬрдЯрд┐рд▓ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдЖрд╡реЗрджрди рдореЗрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рднреВрдорд┐рдХрд╛рдПрдВ рд╣реИрдВ рдпрд╛ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЧреЗрдЯреНрд╕ рдФрд░ рдиреАрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ


Source: https://habr.com/ru/post/hi481796/


All Articles