如何为不同的用户访问级别创建用户数据库表



我在创建数据库表以供用户登录系统的不同级别访问时遇到问题。我有3个用户角色";ENUM(master _admin,admin_country,admin_city(";。

如果登录的master _ admin将能够访问整个系统,但是如果登录的admin_ city将仅使用countryID访问他的国家,如果登录的admin_city只能使用cityID 访问他的城市数据

创建用户表时出现问题,该表将保存不同管理员,以便他们可以访问系统的相关部分。因此,稍后当创建其他管理员来覆盖系统的其他部分时,可以很容易地使用相同的用户表来设置它们。

我试过这个:

users table
+--------+-----------+-------------+
| userID | countryID | user_role|  |
+--------+-----------+-------------+
|  1     |  23       | master      |             
+--------+-----------+-------------+
countries table
+-----------+-------------+
| countryID | countryName | 
+-----------+-------------+
|  23       |  US         |                  
+-----------+-------------+
coutrries table
+-----------+-------------+-------------+
| cityID    | countryID   | cityName    |
+-----------+-------------+-------------+
|  2        |  23         |  New York   |                
+-----------+-------------+-------------+

如何为这个问题设置用户表。

拆分用户表

users table
+--------+-----------+-----------------+
| userID | username  | email           |
+--------+-----------+-----------------+
|  1     |  adm      | master@master   |             
+--------+-----------+-----------------+
users_Role table
+--------+-----------+------------+-------------+
| userID | countryID | cityID     |  roleID     |
+--------+-----------+------------+-------------+
|  1     |  23       | NULL       |   1         |             
+--------+-----------+------------+-------------+
|  1     |  22       | NULL       |   2         |             
+--------+-----------+------------+-------------+
|  1     |  NULL     | 2          |  3          |             
+--------+-----------+------------+-------------+
role table
+-----------+-----------------+
|  roleID   | roleName        | 
+-----------+-----------------+
|  1        |  Master         |                  
+-----------+-----------------+
|  2        |  COUNTRYMASTER  |                  
+-----------+-----------------+
|  3        |  CityMaster     |                  
+-----------+-----------------+

当然,您可以创建一个城市/国家id列,因为该角色定义了保存的id类型。

因此,可以为每个用户提供或删除每个国家和/或城市的个人权限。

User_role有多余的信息,因此需要另一个角色才能正常化

你并没有尝试那么多,这意味着你的问题相当模糊。无论何时设计具有不同访问级别的系统,都需要确保不会意外授予访问权限。即使是一个bug也不应该让这成为可能。

这样做的一个糟糕方法是在users表中创建一个cityId。如果有一个数字,比如2,则用户只能访问纽约的数据,如果是3,则只能访问华盛顿等。如果值为零,则用户可以访问所有城市。在这里,选择零似乎是有意义的,但这是危险的,因为设置cityId时的错误可能会将其设置为零,并授予不应该授予的访问权限。

要做到这一点,通常的方法是制作一个单独的表,该表非常明确地授予访问权限。您可以将此表称为permission。每个用户都可以拥有多个权限。你可以在其中定义一个级别:"master"、"country"one_answers"city"。这告诉你某人有什么样的访问权限。其他字段可以准确地指定哪个国家或城市。

每当用户访问某个资源时,您都必须根据用户的权限对其进行检查。只有当答案为肯定时才授予访问权限。你必须以这样一种方式编写软件,忘记检查权限会破坏软件的功能。

我还会记录每一次访问,以及对权限表所做的每一次更改。你可能会惊讶于你需要扮演侦探的频率,并找出谁在什么时候做了什么。

无论你做什么,这都不会像它所能做到的那样安全。用户总是可以访问一些他们不应该访问的东西。这可能是由于错误或管理员的错误造成的。真正安全的唯一方法是将城市和国家放在不同的数据库中,并让用户只存在于允许他们访问的数据库中。安全性和实用性往往是敌人。

相关内容

  • 没有找到相关文章

最新更新