Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature may not be available in some browsers.
Uups (:-o) ich hatte gedacht das ist eine ganz schöne AnfängerfrageAnfängerfrage ist das wirklich nicht. Also grundsätzlich brauchst du dafür ja schonmal eine Unterscheidung für Personen. Das geht am besten über ein Login. Und dann musst du irgendwo die Berechtigungen abpeichern (zum Beispiel in einer Datenbank). Das Ganze ist schon ein wenig komplizierter. Ich würde dir raten, erst andere Sachen zu probieren :) Denn Rechtevergabe ist schon kompliziert :)
Das sagt mir jeder, bei CSS, C++ usw. !Das bedarf eine ganze Planung. Datenbank-Design, Sicherheitsabfragen vor SQL-Injections usw. Da wirst du nicht mal eben Code finden :)
Denn das sollten minimum 5 Dateien a 50 zeilen oder mehr sein :)
Wie gesagt. probier dich erst mal an etwas anderem ;)
Ich arbeite ein PHP-Buch durch!hör auf irgendwas erschaffen zu wollen, versuch mal was lernen zu wollen :)
arbeite am besten mal ein php buch durch.
<?php
require_once './inc.user.php';
require_once './inc.session.php';
session_start();
hansi3000_session_init();
$errors = array();
// Formulare verarbeiten
if (isset($_POST['formId'])) {
if ($_POST['formId'] == 'login') {
// Login
if (hansi3000_user_doLogin($_POST['username'], $_POST['password'])) {
$_SESSION['username'] = $_POST['username'];
} else {
$errors[] = 'Login fehlgeschlagen!';
}
} else if ($_POST['formId'] == 'logout') {
// Logout
$_SESSION['username'] = '';
}
if (count($errors) == 0) {
// Seite einmal "weiterschubsen", um $_POST-Daten zu löschen
header('location: http://' . $_SERVER['SERVER_NAME'] . $_SERVER['SCRIPT_NAME']);
exit;
}
}
$user = hansi3000_user_getUserData($_SESSION['username']);
header('Content-Type: text/html; charset=utf-8');
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>demo</title>
</head>
<body>
<?php if (count($errors) > 0): ?>
<h2>Fehler</h2>
<?php foreach ($errors as $error): ?>
<p><?php echo htmlspecialchars($error); ?></p>
<?php endforeach; ?>
<?php endif; ?>
<?php if ($user['username'] == ''): ?>
<form method="post" action="">
<p>Name: <input type="text" name="username" /></p>
<p>Passwort: <input type="password" name="password" /></p>
<p><input type="hidden" name="formId" value="login" />
<input type="submit" value="Login" /></p>
</form>
<?php else: ?>
<p>Eingeloggt als: <?php echo htmlspecialchars($user['username']); ?></p>
<form method="post" action="">
<p><input type="hidden" name="formId" value="logout" />
<input type="submit" value="Logout" /></p>
</form>
<?php endif; ?>
<?php if (in_array('content_administer', $user['rights'])): ?>
<p>Sie haben Administrationsrechte.</p>
<?php endif; ?>
<?php if (in_array('content_create', $user['rights'])): ?>
<p>Sie können Inhalt erstellen.</p>
<?php endif; ?>
<?php if (in_array('content_view', $user['rights'])): ?>
<p>Sie können den Inhalt sehen.</p>
<?php endif; ?>
</body>
</html>
<?php
function _hansi3000_user_getRightsByGroup($groupName)
{
$rights = array('content_view', 'content_administer', 'content_create');
$groups = array(
// Alle Rechte
'admin' => $rights,
// Keine Rechte
'guest' => array(),
'user' => array('content_view'),
'editor' => array('content_create')
);
if (isset($groups[$groupName])) {
$rights = $groups[$groupName];
} else {
$rights = array();
}
return $rights;
}
function _hansi3000_user_getUsers()
{
$users = array();
$users['admin'] = array('password' => 'test', 'groups' => array('admin'));
$users['hansi3000'] = array('password' => 'abc123', 'groups' => array('user', 'editor'));
$users['mermshaus'] = array('password' => 'def456', 'groups' => array('user'));
return $users;
}
function hansi3000_user_getUserData($username)
{
$users = _hansi3000_user_getUsers();
$ret = null;
if (isset($users[$username])) {
// Eingeloggter Nutzer
$ret = $users[$username];
$ret['username'] = $username;
} else {
// Gast
$ret = array(
'username' => '',
'groups' => array('guest')
);
}
$rights = array();
foreach ($ret['groups'] as $group) {
$rights = array_merge($rights, _hansi3000_user_getRightsByGroup($group));
}
$ret['rights'] = $rights;
return $ret;
}
function hansi3000_user_doLogin($username, $password)
{
$users = _hansi3000_user_getUsers();
$ret = false;
if (isset($users[$username])
&& $users[$username]['password'] == $password
) {
$ret = true;
}
return $ret;
}
<?php
function hansi3000_session_init()
{
// Standardwert setzen, falls keine Session existiert
if (!isset($_SESSION['username'])) {
$_SESSION['username'] = '';
}
}
<?php
require_once './inc.user.php';
require_once './inc.session.php';
session_start();
hansi3000_session_init();
$user = hansi3000_user_getUserData($_SESSION['username']);
?>
<!--Hier beginnt der HTML-Code -->
Danke für die Mühe! Das erlärt wirklich einiges!Habe mal ein wenig was gebastelt ohne Datenbanken und OOP und FrontController-Layout. Der Code dürfte selbsterklärend sein. Kommentare waren mir dann wirklich zu viel.
Hinweis: Das Beispiel soll nicht mehr als einen ersten Ansatz liefern, dass das so nicht wirklich schlau gelöst ist, ist mir bewusst. ;)
index.php
inc.user.phpPHP:<?php require_once './inc.user.php'; require_once './inc.session.php'; session_start(); hansi3000_session_init(); $errors = array(); // Formulare verarbeiten if (isset($_POST['formId'])) { if ($_POST['formId'] == 'login') { // Login if (hansi3000_user_doLogin($_POST['username'], $_POST['password'])) { $_SESSION['username'] = $_POST['username']; } else { $errors[] = 'Login fehlgeschlagen!'; } } else if ($_POST['formId'] == 'logout') { // Logout $_SESSION['username'] = ''; } if (count($errors) == 0) { // Seite einmal "weiterschubsen", um $_POST-Daten zu löschen header('location: http://' . $_SERVER['SERVER_NAME'] . $_SERVER['SCRIPT_NAME']); exit; } } $user = hansi3000_user_getUserData($_SESSION['username']); header('Content-Type: text/html; charset=utf-8'); ?> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>demo</title> </head> <body> <?php if (count($errors) > 0): ?> <h2>Fehler</h2> <?php foreach ($errors as $error): ?> <p><?php echo htmlspecialchars($error); ?></p> <?php endforeach; ?> <?php endif; ?> <?php if ($user['username'] == ''): ?> <form method="post" action=""> <p>Name: <input type="text" name="username" /></p> <p>Passwort: <input type="password" name="password" /></p> <p><input type="hidden" name="formId" value="login" /> <input type="submit" value="Login" /></p> </form> <?php else: ?> <p>Eingeloggt als: <?php echo htmlspecialchars($user['username']); ?></p> <form method="post" action=""> <p><input type="hidden" name="formId" value="logout" /> <input type="submit" value="Logout" /></p> </form> <?php endif; ?> <?php if (in_array('content_administer', $user['rights'])): ?> <p>Sie haben Administrationsrechte.</p> <?php endif; ?> <?php if (in_array('content_create', $user['rights'])): ?> <p>Sie können Inhalt erstellen.</p> <?php endif; ?> <?php if (in_array('content_view', $user['rights'])): ?> <p>Sie können den Inhalt sehen.</p> <?php endif; ?> </body> </html>
inc.session.phpPHP:<?php function _hansi3000_user_getRightsByGroup($groupName) { $rights = array('content_view', 'content_administer', 'content_create'); $groups = array( // Alle Rechte 'admin' => $rights, // Keine Rechte 'guest' => array(), 'user' => array('content_view'), 'editor' => array('content_create') ); if (isset($groups[$groupName])) { $rights = $groups[$groupName]; } else { $rights = array(); } return $rights; } function _hansi3000_user_getUsers() { $users = array(); $users['admin'] = array('password' => 'test', 'groups' => array('admin')); $users['hansi3000'] = array('password' => 'abc123', 'groups' => array('user', 'editor')); $users['mermshaus'] = array('password' => 'def456', 'groups' => array('user')); return $users; } function hansi3000_user_getUserData($username) { $users = _hansi3000_user_getUsers(); $ret = null; if (isset($users[$username])) { // Eingeloggter Nutzer $ret = $users[$username]; $ret['username'] = $username; } else { // Gast $ret = array( 'username' => '', 'groups' => array('guest') ); } $rights = array(); foreach ($ret['groups'] as $group) { $rights = array_merge($rights, _hansi3000_user_getRightsByGroup($group)); } $ret['rights'] = $rights; return $ret; } function hansi3000_user_doLogin($username, $password) { $users = _hansi3000_user_getUsers(); $ret = false; if (isset($users[$username]) && $users[$username]['password'] == $password ) { $ret = true; } return $ret; }
Initialisieren eines Nutzers auf einer Nicht-Login-Seite:PHP:<?php function hansi3000_session_init() { // Standardwert setzen, falls keine Session existiert if (!isset($_SESSION['username'])) { $_SESSION['username'] = ''; } }
PHP:<?php require_once './inc.user.php'; require_once './inc.session.php'; session_start(); hansi3000_session_init(); $user = hansi3000_user_getUserData($_SESSION['username']); ?> <!--Hier beginnt der HTML-Code -->
PS: Bei inc.user.php und inc.session.php hast du den Endetag (?>) vergessen.
function get_user_right($userid,$feld=0)
{
$wert = file($userid.".right");
$rights = explode("\t",$wert[0]);
return trim(chop($rights[$feld]));
}
if(get_user_right(7,3) == 1)
{
//darf was machen
}
else
{
// darf nichts machen
}
So schwer ist das garnicht. Ein Bsp:
Z.B eine Datei mit folgendem Inhalt, durch Tab getrennt, Name z.b. 7.right:
1 1 1 1 0 1 0 0 1
Feld0 : darf Administrieren
Feld1 : darf Eintrag machen
Feld2 : darf User anlegen
Feld2 : darf Eintrag löschen
und so weiter
Wenn du nun z.b. prüfen willst, ob User 7 Einträge löschen darf, dann liest du die Datei 7.right aus und analysierst Feld 3 ob dort 1 oder 0 steht.
Bastel dir am Besten eine Funktion, die dir ein bestimmtes Feld zu einer Userid analysiert und gib ja oder nein zurück.
z.B.
auf Bedarf kannst du nun deine Rechte so abfragen:PHP:function get_user_right($userid,$feld=0) { $wert = file($userid.".right"); $rights = explode("\t",$wert[0]); return trim(chop($rights[$feld])); }
Faustregel:PHP:if(get_user_right(7,3) == 1) { //darf was machen } else { // darf nichts machen }
je einfacher eine Rechteprüfung ist, um so sicherer ist sie.
und JA, ich lege Rechte wirklich gerne in Dateien und nicht in der Datenbank ab, so kann ich z.b. das Recht, ob die Datenbank repariert werden darf auch dann prüfen, wenn die Datenbank defekt ist... ;-)
ps.
Code aus den stegreif, kleiner Fehler also möglich und das ist natürlich nur ein Ansatz...
(Deine Frage ging aber eindeutig in Richtung User-Rechte).
Ich setze das PRINZIP (es ist ja bitte auch nur ein Ansatz) seit vielen Jahren ein und habe noch keinerlei negative Erfahrungen damit.
Ich weiß, Du wirst DIch gleich wieder fürchterlich bei mir beschweren oder glauben, dass ich Dir nichts zutraue usw. usf.Das sagt mir jeder, bei CSS, C++ usw. !