ACL на уровне поля в CodeIgniter

Я искал SO, гуглил каждую комбинацию ACL, CodeIgniter, на основе ролей и т. д. и нашел много хороших предложений для управления доступом к контроллерам и методам, но ничего не нашел для чего-то, что дает контроль на уровне поля.

Я скачал пару (phpgacl и zend acl), чтобы посмотреть, можно ли их легко изменить в соответствии с моими потребностями в разрешениях на уровне полей. Поэтому, прежде чем я потрачу время, чтобы создать его с нуля...

Вопрос. Существует ли библиотека и/или передовой опыт для разрешения ограничений на уровне полей на основе входа пользователя в систему?

В частности, я хочу, чтобы в зависимости от членства пользователя в группе AD были поля формы:

  • Не появляется
  • Появляться, но быть доступным только для чтения
  • Быть редактируемым

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


person AlexC    schedule 10.09.2012    source источник
comment
Я вижу пару голосов, чтобы закрыть. Не могли бы вы сообщить мне, почему неконструктивные голоса и как я могу исправить? Я проверил, как спрашивать, и я сделал домашнее задание, попытался быть конкретным, я думаю, что это будет иметь отношение к другим (я не могу быть единственным, кто ищет это, не так ли?), и я специально пытался упредить дебаты , аргументы, опрос или расширенное обсуждение. Пожалуйста, дайте мне знать, что я могу сделать, чтобы улучшить этот вопрос.   -  person AlexC    schedule 10.09.2012
comment
Я пока не встречал каких-либо общедоступных CI-библиотек, предлагающих ACL на уровне поля. Возможно, вам придется использовать комбинацию ACL и расширения встроенной библиотеки проверки формы, чтобы добиться того, что вам нужно.   -  person Brendan    schedule 10.09.2012
comment
@ Брендан Спасибо за подтверждение. Вот куда я направляюсь дальше, если ни у кого больше ничего нет. Просто ничего не увидел в своде знаний. Если я в конечном итоге что-то создам, я опубликую это для использования.   -  person AlexC    schedule 10.09.2012
comment
@Brendan Итак, ты в итоге создал что-нибудь, чем можешь поделиться?   -  person Fr0zenFyr    schedule 05.06.2017
comment
@Fr0zenFyr Я перешел на Laravel пару лет назад. Предлагаем вам сделать то же самое. Красноречивый › Модели CI.   -  person Brendan    schedule 23.06.2017
comment
@Brendan Спасибо, но я уже на CakePHP, только что сделал один старый проект на CI ... Я не могу тратить время на его перенос на что-то более надежное и разумное, такое как Cake или Laravel .. В любом случае спасибо! Ваше здоровье!   -  person Fr0zenFyr    schedule 23.06.2017


Ответы (1)


Что ж, я отвечаю на один из ваших вопросов. В настоящее время я использую ACL «на основе флага», если хотите. В моей таблице пользователей у меня есть 3 поля: Activated, Staffmember, Admin. Я запускаю 3 запроса в 2 разных моделях, чтобы проверить, предоставлены ли учетные данные для входа.

WHERE staffmember = 1
WHERE Admin = 1
WHERE activated = 1

если запись возвращается, я превращаю ее в возвращаемое значение.

Это мои операторы if else, чтобы решить, кто что видит:

    function index()
{
    $this->load->model('staff_model'); // loads model that queries if username is associated with a admin or staff account
    if($staffmember = $this->staff_model->staffmember()) //Checks for staff value == 1 
    {
        if($is_admin = $this->staff_model->is_admin()) // Checks for admin value == 1
        {
            redirect('admin_controller/index'); // redirects to what the admin will see (the admin pages, add users, delete users, deactivate users, this way I set up a sorta CMS type system
        }else{ // If not admin == 1 meaning it can be a staff member == 1 
            $data['main_content'] = 'staff_homepage_view'; //sets up template for staff member
            $this->load->view('includes/template', $data); // this will then load the view for staff member
        }
    }else{ // If not staff == 1 // then if it is not staff member it will load the view for a no permission account in this case : student 
        $data1['main_content'] = 'student_homepage_view';
        $this->load->view('includes/template', $data1); 
        }
    }

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

Таким образом, администратор ДОЛЖЕН БЫТЬ сотрудником, и таким образом активированная учетная запись без разрешений не может быть сотрудником или администратором.

Итак, что вы можете сделать, так это настроить в таблице пользователей поле под названием «Редактировать».

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

person RaGe10940    schedule 17.02.2013