Sql 用户和权限

Sql 用户和权限,sql,database-design,permissions,Sql,Database Design,Permissions,我想给一些用户某些权限。这是最好的方式吗?我不想让组像:管理员,版主,正常等等。我想能够给一个用户可能访问使新闻发布,另一个创建投票,也许另一个删除投票 我在想这样的表格: CREATE TABLE `users` ( `id` mediumint(8) unsigned NOT NULL, `username` varchar(255) NOT NULL, `password` varchar(255) NOT NULL, ) CREATE TABLE `user_permissions`

我想给一些用户某些权限。这是最好的方式吗?我不想让组像:管理员,版主,正常等等。我想能够给一个用户可能访问使新闻发布,另一个创建投票,也许另一个删除投票

我在想这样的表格:

CREATE TABLE `users` (
`id` mediumint(8) unsigned NOT NULL,
`username` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
)

CREATE TABLE `user_permissions` (
`id` mediumint(8) unsigned NOT NULL,
`user_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
`can_post_news` tinyint(1) NOT NULL DEFAULT '0',
`can_delete_topics` tinyint(1) NOT NULL DEFAULT '0'
 ........
)
在每一页上,我需要检查:

$sql = mysql_query("SELECT * FROM user_permissions WHERE user_id = $loggedinuser");
$row = mysql_fetch_assoc($sql);

if ($row['can_delete_topics'] == 1) {
mysql_query("delete from topics....");
}
另一个问题:我可以做一个“检查代码”的函数,这样我就不需要在每一页上都使用这个丑陋的代码了吗?我对函数还不是很在行

请原谅我的英语,我正在尽力


谢谢

更好的方法是使用postgresql语法:

CREATE TABLE users (
    id      SERIAL, -- autoincrementing int
    ...
)

CREATE TABLE permissions (
    id      SERIAL,
    name    VARCHAR(255) NOT NULL,
    ...
)

create table users_permissions (
    id_user REFERENCES users(id),
    id_permission REFERENCES permission(id),
    UNIQUE(id_user, id_permission)
)
然后在users\u permissions表中检查一行

关于你的第二个问题,故事更长。对于上面的代码,您必须检查用户是否具有执行特定函数的正确权限。我记得的php不是php吗?有一个pear,它是一个有用的代码库。还有一个很大的类存储库,但我记不起它的名字了

编辑:


我发现这个网站:多么难记住…

更好的方法是使用postgresql语法:

CREATE TABLE users (
    id      SERIAL, -- autoincrementing int
    ...
)

CREATE TABLE permissions (
    id      SERIAL,
    name    VARCHAR(255) NOT NULL,
    ...
)

create table users_permissions (
    id_user REFERENCES users(id),
    id_permission REFERENCES permission(id),
    UNIQUE(id_user, id_permission)
)
然后在users\u permissions表中检查一行

关于你的第二个问题,故事更长。对于上面的代码,您必须检查用户是否具有执行特定函数的正确权限。我记得的php不是php吗?有一个pear,它是一个有用的代码库。还有一个很大的类存储库,但我记不起它的名字了

编辑:


我发现这个网站:有多难记住…

为什么您不想创建组来分配这些角色?设置完成后,您所要做的就是在角色中添加或删除用户ID。为什么不创建组来分配这些角色?设置完成后,您所要做的就是从角色中添加或删除用户ID。+1并且可以在用户会话开始时将此权限读取到某个类变量中,然后通过检查类属性简单地检查所需的权限。至少这种方式比每次执行select要快。+1和该权限可以在用户会话开始时读入某个类变量,然后通过检查类属性简单地检查所需的权限。至少这种方式比每次执行select要快。