Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Catalyst::Authentication 
:(
    Опции темы
gcc
Дата 7.2.2009, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



работает
Код

$c->user->{user}->{username}


Это сообщение отредактировал(а) gcc - 7.2.2009, 21:16
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 20.2.2009, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



Код

    __PACKAGE__->deny_access_unless(
            "/add1",
            [qw/admin/],
        );

    __PACKAGE__->deny_access_unless(
            "/add2",
            [qw/admin/],

        );


почему данный код админа не пускает?

он пишет что длступ запрещен, то есть всем запрещает доступ, странно...

я хотел разрешить вход в 2 раздела только админу, все остальное всем разрешить...

Это сообщение отредактировал(а) gcc - 20.2.2009, 17:29
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 23.2.2009, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



кучу времени потратил, нифига не нашел...

в общем он в тупую не пускает того пользователя которого должен...

или я что-то не понял?

в общем логично написать чтобы запретить всем крмое админа...

кто как делал?

Это сообщение отредактировал(а) gcc - 23.2.2009, 10:17
PM WWW ICQ Skype GTalk Jabber   Вверх
NuINu
Дата 23.2.2009, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 19.7.2008

Репутация: 5
Всего: 6



admin это кто? пользователь? а какие у него роли определены? в правилах указываются РОЛИ
PM MAIL   Вверх
gcc
Дата 23.2.2009, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



1) admin это пользователь роли  id 1
Код


INSERT INTO roles VALUES (3, '/add1');

    INSERT INTO user_roles VALUES (1, 3);


Код

[debug] Path is "add1"
[debug] running ACL rule CODE(0x8d52830) defined at .../MyApp.pm line 115 on add1
[error] Class::Throwable : An error occurred while evaluating ACL rules.



2) как мне запретить чтобы пользователи не заходили туда где у них нет "ролей"? потому что роли не реагируют....

Это сообщение отредактировал(а) gcc - 23.2.2009, 13:27
PM WWW ICQ Skype GTalk Jabber   Вверх
NuINu
Дата 23.2.2009, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 19.7.2008

Репутация: 5
Всего: 6



Цитата(gcc @  23.2.2009,  10:18 Найти цитируемый пост)
 как мне запретить чтобы пользователи не заходили туда где у них нет "ролей"? потому что роли не реагируют....


просто, прочти документацию. поверь - роли реагируют.


Цитата(gcc @  23.2.2009,  10:18 Найти цитируемый пост)
1) admin это пользователь роли  id 1

а имя у этого id  есть?
вот у роли с id 3 имя есть, и оно '/add1' - это вижу.
а у id 1?

как бы помягче сказать: тебе надо немного отдохнуть, а то ты перенапрягаешься с этой работой.
а вот после отдыха взять все и заново прочитать, и тогда ты не будешь путать пользователя с ролью, а роль с путем.
PM MAIL   Вверх
gcc
Дата 24.2.2009, 07:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



Код

    --
    -- Add users and roles tables, along with a many-to-many join table
    --
    CREATE TABLE users (
            id            INTEGER PRIMARY KEY,
            username      TEXT,
            password      TEXT,
            email_address TEXT,
            first_name    TEXT,
            last_name     TEXT,
            active        INTEGER
    );
    CREATE TABLE roles (
            id   INTEGER PRIMARY KEY,
            role TEXT
    );
    CREATE TABLE user_roles (
            user_id INTEGER,
            role_id INTEGER,
            PRIMARY KEY (user_id, role_id)
    );
    --
    -- Load up some initial test data
    --
    INSERT INTO users VALUES (1, 'test01', 'mypass', '[email protected]', 'Joe',  'Blow', 1);
    INSERT INTO users VALUES (2, 'test02', 'mypass', '[email protected]', 'Jane', 'Doe',  1);
    INSERT INTO users VALUES (3, 'test03', 'mypass', '[email protected]', 'No',   'Go',   0);
    INSERT INTO roles VALUES (1, 'user');
    INSERT INTO roles VALUES (2, 'admin');
    INSERT INTO user_roles VALUES (1, 1);
    INSERT INTO user_roles VALUES (1, 2);
    INSERT INTO user_roles VALUES (2, 1);
    INSERT INTO user_roles VALUES (3, 1);


id: 1
username: admin
Код

INSERT INTO roles VALUES (3, '/add1');

Код

INSERT INTO user_roles VALUES (1, 3);


какую именно документацию? документации под DBI мало
http://search.cpan.org/~janus/Catalyst-Aut...on/Store/DBI.pm
http://search.cpan.org/~bricas/Catalyst-Pl...zation/Roles.pm

тут
http://search.cpan.org/~hkclark/Catalyst-M...tion.pod#___top
если точно, то в документации есть про DBIC, это не надо

тут описано для другой таблицы!
http://search.cpan.org/~janus/Catalyst-Aut...on/Store/DBI.pm

я поставил
Код

 __PACKAGE__->config->{'authentication'} = {
    'default_realm' => 'default',
    'realms' => {
      'default' => {
        'credential' => {
          'class'               => 'Password',
          'password_field'      => 'password',
          'password_type'       => 'hashed',
          'password_hash_type'  => 'SHA-1',
        },
        'store' => {
          'class'              => 'DBI',
          'user_table'         => 'users',
          'user_key'           => 'id',
          'user_name'          => 'username',
          'role_table'         => 'roles',
          'role_key'           => 'id',
          'role_name'          => 'role',
          'user_role_table'    => 'user_roles',
          'user_role_user_key' => 'user_id',
          'user_role_role_key' => 'role_id',
        },
      },
    },
  };


все правильно?

я хотел спросить: перед тем как разрешать доступ, нужно доступ запретить всем зарегиритрированным? 
(именно это не написано в документации)

я поставил эти роли, но оно не запрещает просто, не реагирует, забивает на эти роли.
(я выделил жирным чтобы было видно главный вопрос)

если вы делали, то скажите как сделать чтобы они реагировали?
я не вижу где написано в документации чтобы запретить тем у кого нету ролей, повторяю: я добавил роли - не реагирует...


Это сообщение отредактировал(а) gcc - 24.2.2009, 09:06
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 24.2.2009, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



http://search.cpan.org/~mramberg/Catalyst-...BI-0.10/CDBI.pm

этот модуль мне не нужен?


PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 24.2.2009, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



уровни доступа без mysql работают!! 

но как настроить Catalyst::Authentication::Store::DBI ? чтобы эти роли ставить в таблицы СУБД?

NuINu, а можно как-то проверить работает ли этот модуль Catalyst::Authentication::Store::DBI ?

Это сообщение отредактировал(а) gcc - 24.2.2009, 12:01
PM WWW ICQ Skype GTalk Jabber   Вверх
NuINu
Дата 24.2.2009, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 19.7.2008

Репутация: 5
Всего: 6



Цитата(gcc @  24.2.2009,  05:33 Найти цитируемый пост)
перед тем как разрешать доступ, нужно доступ запретить всем зарегиритрированным? 
(именно это не написано в документации)


не нужно.


Цитата(gcc @  24.2.2009,  09:59 Найти цитируемый пост)
уровни доступа без mysql работают!! 

ну я тебя поздравляю.

Цитата(gcc @  24.2.2009,  09:59 Найти цитируемый пост)

NuINu, а можно как-то проверить работает ли этот модуль Catalyst::Authentication::Store::DBI ?

можно. просто вставь в него отладочный вывод... или просто активизируй его внутреннюю отладку(она наверняка есть).


Цитата(gcc @  24.2.2009,  09:59 Найти цитируемый пост)
но как настроить Catalyst::Authentication::Store::DBI ?

а тут я тебе помочь не могу, я использовал другой модуль для авторизации. тут на конфе парень рекламировал irc сходи к ним может там кто этот модуль пользовал.
PM MAIL   Вверх
gcc
Дата 18.3.2009, 07:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



ныжно посмотреть id пользователя в котрого активная сессия, и тот который работает

например:
Код


                     if ($loop_data2->{id_un} == $c->user->{user}->{id} 
                             ||  $c->check_user_roles('moder') ) {
                                    $c->stash->{edit} = 1;                    
               bla bla
                            } 

        
но если пользователь 'гость' то выдается ошибка 
Код

[error] Caught exception in MyApp::Controller::view_content_head->view_head "
Can't use an undefined value as a HASH reference at 


приходиться писать так:

Код

             if  ($c->user_exists()) {
                     if ($loop_data2->{id_un} == $c->user->{user}->{id} 
                             ||  $c->check_user_roles('moder') ) {
                                    $c->stash->{edit = 1;                    
        
                            } 
                    
                }


не карсиво и не удоюно, в исходниках я не нашле ничего, не полдучилось

пробовал сделать так: (не работает)
Код

sub id
{
        my $self = shift;

        my $user_key = $self->{'store'}{'user_key'};
 
    if ($self->{'user'}{$user_key}) {
   return $self->{'user'}{$user_key};
     } else {
   return '0';
     }
}



нашел сам метод
Код

sub user_exists {
        my $c = shift;
        return defined($c->_user) || defined($c->find_realm_for_persisted_user);
}


в DBIx::Class или в Rose:smileB была таккая ошибка когда вы смотрите id?

Это сообщение отредактировал(а) gcc - 18.3.2009, 07:39
PM WWW ICQ Skype GTalk Jabber   Вверх
NuINu
Дата 18.3.2009, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 19.7.2008

Репутация: 5
Всего: 6



Цитата(gcc @  18.3.2009,  05:37 Найти цитируемый пост)
в DBIx::Class или в Rose:: DB была таккая ошибка когда вы смотрите id?


данная ошибка:

Цитата(gcc @  18.3.2009,  05:37 Найти цитируемый пост)
[error] Caught exception in MyApp::Controller::view_content_head->view_head "
Can't use an undefined value as a HASH reference at 

это не проблема Rose или DBIx, она вообще к ним никакого отношения не имеет.

у меня, ВСЕГДА проверяется if  ($c->user_exists())
и делается это не везде, а в одном месте
контроллер Root метод auto

тебе надо лучше изучать примеры которые идут с каталистом, ты проскакал галопом по европам, а теперь на ерунде спотыкаешься.
Код

sub auto : Private {
    my ($self, $c) = @_;

        # Allow unauthenticated users to reach the login page.  This
        # allows anauthenticated users to reach any action in the Login
        # controller.  To lock it down to a single action, we could use:
        #   if ($c->action eq $c->controller('Login')->action_for('index'))
        # to only allow unauthenticated access to the 'index' action we
        # added above.
        #позволим неавторизированным пользователям переходить на страницу Логин
    if ($c->controller eq $c->controller('Login')) {
            return 1;
    }

            # If a user doesn't exist, force login
    if (!$c->user_exists) {
            # Dump a log message to the development server debug output
        $c->log->debug('***Root::auto User not found, forwarding to /login');
            # Redirect the user to the login page
        $c->response->redirect($c->uri_for('/login'));
            # Return 0 to cancel 'post-auto' processing and prevent use of application
        return 0;
    }

        # User found, so return 1 to continue with processing after this 'auto'
    return 1;
}



например в данном коде, можно не авторизированного пользователя который не выполнил логин, определить, присвоить ему значение user - гость, а уже у данного пользователя в базе прав должна быть РОЛЬ - гость. и уже весь остальной код должен работать только с ролями(ну вернее может работать)
это будет автоматическая аутентификация(псевдо аутентификация, ведь о пользователе мы при этом ничего не узнали) но эта модель позволит нам работать с ним как с обычным аутентифицированным пользователем.

а у тебя получается пользователь не прошедший аутентификацию уже кудато лезет на сайт, и ты ему это делать разрешаешь, в результате чего приходиться везде проверять а есть ли такой пользователь.
ну это логично. если так делать то надо проверять сначала пользователя, а уж после этого его права.

уж сам выбирай как делать.
PM MAIL   Вверх
gcc
Дата 18.3.2009, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



Цитата(NuINu @ 18.3.2009,  10:40)
например в данном коде, можно не авторизированного пользователя который не выполнил логин, определить, присвоить ему значение user - гость, а уже у данного пользователя в базе прав должна быть РОЛЬ - гость. 


не вижу, где там это написано,
http://search.cpan.org/~hkclark/Catalyst-M...hentication.pod
http://search.cpan.org/~hkclark/Catalyst-M...thorization.pod

покажи пожалуйста, как это сделать, присвоить "гостью" имя?

или надо как-то принудительно написать?

ну вот часть кода, то есть лишниый раз над писать if  ($c->user_exists()) {

    
Код

             if  ($c->user_exists()) {
                     if ($loop_data2->{id_un} == $c->user->{user}->{id} 
                             ||  $c->check_user_roles('moder_se') ) {
                                    $c->stash->{edit_se} = 1;                    
        
                            } 
                    
                }
                    
                #    if ($c->user_exists() == 1 && $loop_data2->{id_un} != $c->user->{user}->{id} &&
                #        !$c->check_user_roles('moder_se') ) {
                #    
                #                          $sql = 'AND hiden_co = 0
            #                  AND active_co = 1';
                #    
                #    
                #    }
             if  ($c->user_exists()) {
                        if ($loop_data2->{active_se} == 1 
                            && $loop_data2->{id_un} != $c->user->{user}->{id}
                            && !$c->check_user_roles('moder_se') ) {
                        
                        $c->stash->{no_show} = 1;                        
                    }
                                        
             }    




Это сообщение отредактировал(а) gcc - 18.3.2009, 11:30
PM WWW ICQ Skype GTalk Jabber   Вверх
NuINu
Дата 18.3.2009, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 19.7.2008

Репутация: 5
Всего: 6



вот именно про это там действительно не написано, это просто мое предложение

заводишь пользователя nobody
заводишь роль guest

присваиваешь роль пользователю nobody->guest

пишешь приблизительно такой код в контролере Root:
Код

sub auto : Private {
    my ($self, $c) = @_;

        # Allow unauthenticated users to reach the login page.  This
        # allows anauthenticated users to reach any action in the Login
        # controller.  To lock it down to a single action, we could use:
        #   if ($c->action eq $c->controller('Login')->action_for('index'))
        # to only allow unauthenticated access to the 'index' action we
        # added above.
        #позволим неавторизированным пользователям переходить на страницу Логин
    if ($c->controller eq $c->controller('Login')) {
            return 1;
    }
            # If a user doesn't exist, force login
    if (!$c->user_exists) {
         if ($c->authenticate({ username => 'nobody',   password => '111111111111'  } )) {
            return 1;
        } else {
                # Set an error message
            $c->stash->{error_msg} = "Bad database guest role, access denied";
            return 0;
        }
    }

        # User found, so return 1 to continue with processing after this 'auto'
    return 1;
}



PM MAIL   Вверх
gcc
Дата 20.3.2009, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



NuINu, можете подсказать зачем сделан Privat? зачем его используют кроме как в root.pm?

это тоже самое что приватный метод?? 
Код


sub _func {
}

$self->_func;


я вот вроде бы все разобрался из документации, но кроме этого Privat...

Local - это например helo : Local  будет братся из URL /helo/

вот например, я не понимаю зачем там 2 метода captcha_uri : Private и check_captcha : Private с Privat, и как они вызываються и где? (если приватный - значить замкнутный? но я не вижу чтобы он в том контроллере вызывался)

http://github.com/jrockway/angerwhale/blob...ller/Captcha.pm


Код

# Captcha.pm
# Copyright (c) 2007 Jonathan Rockway <[email protected]>
 
package Angerwhale::Controller::Captcha;
use strict;
use warnings;
use base 'Catalyst::Controller';
use GD::SecurityImage;
use HTTP::Date;
 
=head1 NAME
 
Angerwhale::Controller::Captcha - generate and validate captchas
 
=head1 METHODS
 
=head2 gen_captcha
 
Generate a security image and store it in the session
 
=cut
 
sub gen_captcha : Private {
    my ($self, $c) = @_;
    my($image, $type, $rnd) = GD::SecurityImage->new(height => 20,
                                                     width => 80,
                                                     scramble => 0,
                                                     lines => 2,
                                                     gd_font => 'Large',)
      ->random->create->out;
    
    $c->session->{captcha} = { image => $image,
                               type => $type,
                               rnd => $rnd,
                             };
}
 
=head2 captcha
 
Return the captcha to the browser
 
=cut
 
 
sub captcha : Path {
    my ($self, $c) = @_;
 
    $c->forward('gen_captcha') unless ref $c->session->{captcha};
    
    $c->response->body($c->session->{captcha}->{image});
    $c->response->content_type('image/'. $c->session->{captcha}->{type});
    $c->res->headers->expires( time() );
    $c->res->headers->header( 'Last-Modified' => HTTP::Date::time2str );
    $c->res->headers->header( 'Pragma' => 'no-cache' );
    $c->res->headers->header( 'Cache-Control' => 'no-cache' );
    $c->detach();
}
  
=head2 captcha_uri
 
Return the URI for the captcha, or nothing if the user has
already used the captcha successfully, or he's logged in.
 
=cut
 
sub captcha_uri : Private {
    my ($self, $c) = @_;
    return if $c->stash->{user}; # XXX user
    return if $c->session->{got_captcha};
    return $c->uri_for('/captcha/captcha');
}
  
=head2 check_captcha($guess)
 
Returns true if the guess is the text in the captcha.
 
=cut
 
sub check_captcha : Private {
    my ($self, $c, $guess) = @_;
 
    return unless ref $c->session->{captcha};
    
    if($c->session->{got_captcha} || $c->session->{captcha}->{rnd} eq $guess){
        $c->session->{got_captcha} = 1; # only need to guess one per session
        return 1;
    }
    return;
}
  
1;




Это сообщение отредактировал(а) gcc - 20.3.2009, 09:49
PM WWW ICQ Skype GTalk Jabber   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0738 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.