The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

Доброго всем

¡ ¡ ¡ ALL GLORY TO GLORIA ! ! !

NAME

Mojolicious::Plugin::RoutesAuthDBI - Generate routes from sql-table, make authentication and make restrict access (authorization) to route with users/roles tables. Plugin makes an auth operations throught the plugin Mojolicious::Plugin::Authentication on which is based.

SYNOPSIS

    # at sub startup
    # after config
    
    $app->plugin('RoutesAuthDBI',  dbh => $app->dbh, auth => {...}, admin => {...},);

OPTIONS

  • dbh - handler DBI connection where are tables: routes, users, roles, refs.

  • auth - hashref options pass to base plugin Mojolicious::Plugin::Authentication. By default the option:

        current_user_fn => 'auth_user',
        

    The options:

        load_user => \&load_user,
        validate_user => \&validate_user,

    are imported from package access controller. See below.

  • access - hashref options for special access controller. This controller has subs and methods for manage auth and access operations, has appling routes from sql-table. By default plugin will load the builtin controller:

        access => {
            controller => 'Admin',
            namespace => 'Mojolicious::Plugin::RoutesAuthDBI',
            ...,
        },

    You might define your own controller by passing options:

        access => {
            controller => 'Foo',
            namespace => 'Bar::Baz', 
            ...,
        },

    See Mojolicious::Plugin::RoutesAuthDBI::Admin for detail options list.

INSTALL

See Mojolicious::Plugin::RoutesAuthDBI::Install.

SQL schema (Postgresql)

See Mojolicious::Plugin::RoutesAuthDBI::PgSQL.

Example routing table records

    Request
    HTTP method(s) (optional)
    and the URL (space delim)
                               Contoller    Method          Route Name        Auth
    -------------------------  -----------  --------------  ----------------- -----
    GET /city/new              City         new_form        city_new_form     1
    GET /city/:id              City         show            city_show         1
    GET /city/edit/:id         City         edit_form       city_edit_form    1
    GET /cities                City         index           city_index        1
    POST /city                 City         save            city_save         1
    GET /city/delete/:id       City         delete_form     city_delete_form  1
    DELETE /city/:id           City         delete          city_delete       1
    /                          Home         index           home_index        0
    get post /foo/baz          Foo          baz             foo_baz           1

It table will generate the Mojolicious routes:

    # GET /city/new 
    $r->route('/city/new')->via('get')->over(<access>)->to(controller => 'city', action => 'new_form')->name('city_new_form');

    # GET /city/123 - show item with id 123
    $r->route('/city/:id')->via('get')->over(<access>)->to(controller => 'city', action => 'show')->name('city_show');

    # GET /city/edit/123 - form to edit an item
    $r->route('/city/edit/:id')->via('get')->over(<access>)->to(controller => 'city', action => 'edit_form')->name('city_edit_form');

    # GET /cities - list of all items
    $r->route('/cities')->via('get')->over(<access>)->to(controller => 'city', action => 'index')->name('cities_index');

    # POST /city - create new item or update the item
    $r->route('/city')->via('post')->to(controller => 'city', action => 'save')->name('city_save');
    
    # GET /city/delete/123 - form to confirm delete an item id=123
    $r->route('/city/delete/:id')->via('get')->over(<access>)->to(controller => 'city', action => 'delete_form')->name('city_delete_form');

    # DELETE /city/123 - delete an item id=123
    $r->route('/city/:id')->via('delete')->over(<access>)->to(controller => 'city', action => 'delete')->name('city_delete');
        
    # without HTTP method and no auth restrict
    $r->route('/')->to(controller => 'Home', action => 'index')->name('home_index');
        
    # GET or POST /foo/baz 
    $r->route('/foo/baz')->via('GET', 'post')->over(<access>)->to(controller => 'Foo', action => 'baz')->name('foo_baz');

Warning

If you changed the routes table then kill -HUP or reload app to regenerate routes.

SEE ALSO

Mojolicious::Plugin::Authentication, Mojolicious::Plugin::Authorization

AUTHOR

Михаил Че (Mikhail Che), <mche [] cpan.org>

BUGS / CONTRIBUTING

Please report any bugs or feature requests at https://github.com/mche/Mojolicious-Plugin-RoutesAuthDBI/issues. Pull requests also welcome.

COPYRIGHT

Copyright 2016 Mikhail Che.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.