我想做个论坛
但是还有好多问题不懂,不敢轻易动手做
比如好多论坛都有版主
每个版主都只能修改自己管理的版块的内容,而不能修改其他版块
这个权限系统是怎么做出来的啊?原理是怎么样的?
哪位达人给讲讲啊?
散分~~~
但是还有好多问题不懂,不敢轻易动手做
比如好多论坛都有版主
每个版主都只能修改自己管理的版块的内容,而不能修改其他版块
这个权限系统是怎么做出来的啊?原理是怎么样的?
哪位达人给讲讲啊?
散分~~~
调试欢乐多
www.discuz.net
www.phpwind.com等等。
1 cww Y
2 add Npermissions 表id userid per
1 1 1,2,3,4,5 ...,10 // 分别对应 栏目 id 为 1 到 10 的栏目
2 2 2,3 // 只对 2,3 有权限 再建个栏目表, 我只说个简单的,供 LZ 参考
还有更好的解决方案吗?
详细点最好啊
本人没做过网站,这是第一个~~所以很菜的说~~
来这问就是为了迅速点么~~
我大概了解了下
一般都是分组,然后创建权限表,用户登录时取出权限值写入session。
然后在需要判断用户权限的页面中判断session的值。这样对不啦?
http://phpgacl.sourceforge.net/
最重要的就是为了锻炼自己的能力,系统都是人开发出来的,如果光用别人的,自己不动手,什么时候才能参与到系统开发中呢?
谢谢楼上各位的指点,我研究了研究,大概写了一个用户登录类,能够判断用户权限并且保存进session。
发来给大家看下,看看有什么可以改进的地方吗?
<?php
include 'mcrypt.inc.php'; //MCRYPT加密类文件,由数据库连接类继承而来
session_start();
class Log extends Mcrypt
{
public $name; //保存用户名
public $link; //保存数据库连接句柄
private $row; //查询结果
function __construct()
{
$this->link=conn::connect(); //连接数据库
}
function userLog($name='',$pass='') //主要函数,用来实现用户登录
{
$conn=$this->link; //将数据库连接句柄赋给局部变量,提高效率
$sql="SELECT * FROM t_userdata WHERE u_name='$name'"; //开始查询数据库
$r=$conn->query($sql);
$r->setFetchMode(PDO::FETCH_ASSOC);
$row=$r->fetch();
if(empty($row)) //如果没有结果说明用户名输入错误
{
$message='用户名错误';
}
else if($row['u_pass']!=$pass) //如果密码错误
{
$message='密码错误';
}
else
{
$this->name=$name; //将用户名返回
$this->row=$row; //将数据库结果集返回
$this->checkPower(); //检查权限
$this->setCookie(); //设置cookie
$message='欢迎您:'.$row['u_name'];
}
echo $message;
}
function checkPower() //检查权限函数
{
$conn=$this->link; //将数据库句柄赋值给局部变量
$sql1="SELECT t_group.g_categoryid as category,t_power.*
FROM t_group
inner join t_power on t_group.g_groupid=t_power.p_groupid
WHERE t_group.g_username='$this->name'"; //联合查询数据库,取出权限权值和所属板块ID
$r=$conn->query($sql1);
$row=$r->fetch();
$p=0;
foreach ($row as $key=>$value) //将权值进行或运算后存入 session 以便以后进行与运算判断
{
switch ($key)
{
case 'category' : $_SESSION['power']['category']=$row['category'];break;//用户所属版块
case 'p_groupid' : break; //p_groupid 用户所属组ID,用来联合查询,不用处理
default: $p=$p|$value; //将权值或运算
}
}
$_SESSION['power']['power']=$p; //将权值存入session
}
function setCookie() //设置cookie
{
$rows=$this->row; //将数据库查询结果集赋值给局部变量
setcookie('yh_user',$this->en_code($rows['u_name'],3600));
setcookie('yh_username',$this->en_code($rows['u_level']),3600);
setcookie('yh_useroicq',$this->en_code($rows['u_oicq']),3600);
setcookie('yh_userdate',$this->en_code($rows['u_date']),3600);
setcookie('yh_userdate',$this->en_code($rows['u_id']),3600);
}
}
?>
这种方法只能保存八种权限,因为二进制只能保存到256
老实点base64_encode吧~~
唉,人笨了干什么都慢
先简单设计一个小系统用着吧
以后再扩展
一,人 表
id 姓名 组id
1 张三 1
2 李四 2
二, 组 表
id 组名
1 党支部
2 团支部
3 小脚侦察队
4 特权组
三,权限表
id 权限名
1 扫地
2 看报纸
3 看毛片
4 罚款
四,组权对应表
id 组id 权id
1 1 1
2 1 2
3 2 2
4 2 3
5 3 3
6 3 4
7 4 1
8 4 2
9 4 3
10 4 4 我参考的这个家伙的设计,感觉还不错,就是缺少角色控制,不过暂时还用不到,在权限表后面加了个权重值列,以便运用时能用简单的与运算判断权限。
咳,可算完成了~~结贴~~~来者有分~