Разграничения прав пользователей блоголёта
11.09.2009Пока я пишу импортеры/экспортеры размышляю о системе управления пользователями в блоголёте. Сейчас в блоголёте пользователь один и он может все. Необходимо придумать систему управления правами пользователей. Пока самое неприятное в этой системе - это проверка прав на каждый чих, а именно в админке и xmlrpc.
И так какие же могут быть права? Рисуются следующие: добавить, редактировать, удалить, просмотреть. Следующее над какими сущностями можно иметь права. Ну это будет посты, комментарии, темы, плагины. Но это еще не все и не так просто. Например возьмем посты - он может создавать новые посты и редактировать свои собственные. Как же такие права можно формализовать? Через единую систему управления правами? Следовательно мало просто посты, нужна еще отдельная сущность - один пост и права на него. Если пойти дальше в абстракции, то можно разрешить комментаторам редактировать свои собственные комментарии - а почему бы и нет?
Абстракции, абстракциями, но нужен единый универсальный механизм. Ну вот например
$users = TUsers::Instance(); //традиционно
$user = $users->login($login, $pass);
if ($user->can('edit', 'posts')) {
//может редактировать любые посты, но как быть с индивидуальным?
}
//проверять через создание объекта и проверка прав через него?
$post = TPost::Instance($id);
if ($post->CanEdit($user)) {
//ну значить надо определить интерфейс для этого, который бы реализовывал класс? Это интересная мысль
}
Ну следовательно вопрос решен следующим образом: прописать интерфейс, в котором будет простынка методов проверки. Также будет отдельная таблица с правами, чтобы можно было проверить без создания объекта.
Интерфейс вообще можно сделать в виде одной функции, а сами методы динамическими (через __call). Ну что то типа
public function CheckRights($action, $user) {
if ($this->author == $user->id)) return true;
return false;
}
С другой стороны придумывать велосипед не стоит - уже давно опробовано существуют права в файловой системе, где действия это чтение, запись, выполнение. Пользователи это владелец, группа и остальные. И право проверяется простой битовой операцией. В блоголёте тоже надо ввести понятие группы. Следовательно надо еще придумать (расписать) управление группами. Например самый главный админ может рулить всеми группами.
Что то я застрял с рутом - как же его права определяются исходя из маски прав на файл? Рут может все, вне зависимости от того, какие права ставит владелец - это как определяется?
Комментарии (11) на запись “Разграничения прав пользователей блоголёта”
Оставить комментарий
Хорошо если бы в админке, когда пишешь или редактируешь пост, была бы возможность выбора меток из имеющихся, также, как сделано у рубрик, просто отмечаешь галочкой нужные.
Честно говоря, всегда недопонимал смысл меток..
Вот несколько соображений, за то, чтобы была возможность подбирать из имеющихся меток:
1. Метки можно использовать для оптимизации по ключевикам. И в этом случае их не должно быть много.
2. Ссылки на похожие записи с анонсом используют теги. Если все теги будут разные то и похожих записей не будет (ну это как крайность)
А вот сейчас пришла компромиссная мысль. А может сделать так чтобы при начале набора новой метки Блоголет подсказывал бы, какие варианты меток, также начинающиеся, уже были использованы ранее? То есть показывал бы все метки у которых начало совпадает с введенной меткой. Ну и чтоб все не показывал, сравнение можно начинать, например, начиная с первых трех букв или более...
и всё же такое возможно - ajax позволяет делать это, видел реализацию то ли на бобрдобр, толе на гуглозакладках
и не нужны пользователи с правами - это только усложнит движок, а пользы в этом пшик
Для того, чтобы могли быть группы, необходима регистрация пользователей, самостоятельная или администратором - отдельный вопрос. Анонимусу, даже подписавшемуся, невозможно выдать права, ибо для следующего комментария он может завести себе другой e-mail.
Но, насколько понимаю я, тикет-система - это уже не формат блога, это больше на форум похоже. Проще сделать гибрид из двух движков со ссылкой с головной страницы.
А делать систему социального блога, типа LJ, IMHO вряд ли стоит, много таких.
http://litepublisher.ru/
А насчет прав создавать посты - наверное, нужна какая-то привязка, к разделу, к типам постов или еще как-то. Иначе варианта два - либо пользователь может делать что угодно, либо только комментировать.