class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new
if user.persisted?
if user.admin?
can :manage, :all
elsif user.moderator?
can :manage, Post, Comment
elsif user.client?
can :create, Post
can [:update, :destroy], Comment, user_id: user.id
end
end
can :read, :all
end
end
Я бы делал как-то так:
$content = '{title abc zxc qwe} test {title abc zxc qwe} {title}';
function matches($matches) {
$title = $matches['title'];
$params = isset($matches['params']) ? preg_split('/\s/', $matches['params']) : array();
var_dump($title);
var_dump($params);
}
$content = preg_replace_callback('/\{(?P<title>[a-z]{1,9})(?:\s(?P<params>[^}]+))?\}/', 'matches', $content);
print $content;
Вопрос неточный. Если в удаленный репозиторий попал файл с паролями, и к этому репозиторию есть доступ у других людей, то первое, что нужно сделать - поменять все пароли, которые оказались опубликованы. Потом файл копируете в надежное место, удаляете в рабочей копии, комитите, добавляете в gitignore, снова коммитите. Делаете git push. Файл можно вернуть обратно.
Если доступ есть только у вас, или принципиально хотите удалить информацию из хранилища, воспользуйтесь командами изменения существующих коммитов `git rebase --interactive` (подробнее в Изменение коммитов в Git, раздел "Изменение НЕ последнего коммита") и принудительной перезаписи истории `git push origin +master` (git push -f).
По второму вопросу. Есть следующая техника: в репозиторий добавляется файл config.ini.example с полным набором настроек, только ненастоящими паролями. В gitignore добавляется config.ini. После этого можно смело копировать config.ini.example в config.ini, вносить нужные изменения, работать.