在大多数应用程序中,都需要根据用户的角色进行访问控制。在本课中,我们将看一个为网络应用程序设置这种控制的例子。作为这项任务的一部分,你将需要。
- 定义用户角色
- 根据角色的不同,控制导航菜单项的显示
- 使之无法导航到特定角色无法访问的页面
初步准备
让我们从准备部分开始。为了方便进一步的配置,创建一个将存储当前用户信息的全局变量是必要的。因此,如果你需要做检查,你将不需要每次都联系后台,并请求关于用户的信息。只需从全局变量中读取必要的数据即可。
有必要考虑到授权用户可以进入应用程序的各种选项。
- 登录是在Login 页面上成功授权的结果。
- 作为注册的结果而登录。
- 对于已经获得授权的用户,通过一个特定页面的链接直接登录。
在每一种情况下,都会使用一个后台查询,返回关于用户的信息。在相应的业务流程中,你只需要添加一个 Set Variable块来记录你之前创建的全局变量 User_gv来记录你之前创建的全局变量。
这个块被添加到 CheckAuth该块被添加到授权用户的业务流程中,该流程位于 Prebuilt文件夹中的业务流程。
为了通过登录或注册页面进入,该块被添加到相应按钮的业务流程中。
让我们在应用程序的起始页上检查结果。要做到这一点,让我们添加一个 Label来问候用户的名字,并且根据角色的不同,写出他是否是一个管理员。
你需要设置一个业务流程,当任何Label ,就会启动(Label onShow触发器)。
- Expand User.关于用户的名字和角色的信息.
- In Array.要检查给定的用户是否在 Admins组中。
- If-Else.对于取决于检查结果的行动的可变性。
- Set Variable (String).要创建一个String 变量,其值为"NOT ",如果用户不是该组的成员,则为空值。 Admins如果用户不是组的成员,则变量值为"",如果是,则变量值为空。
- Concat Strings (Multiple).要创建一个完整的短语,如"Hi, Ken. You are NOT Admin"。
- Label Update Properties.对于这个短语在页面上的最终显示。
如果一切都做得正确,那么用任何变体进入页面,屏幕都会有类似的结果。
菜单项的可见性控制
现在是时候进入主要部分了。让我们创建一个只为管理员准备的页面,并添加相应的菜单项(Admin Page)来转到它。最好的解决方案是默认禁用其可见性。
使用 Navigate块,你必须在参数中选择所创建的页 Page参数,并找出该页面的ID。
在这个例子中,只有一个页面是限制访问的,但是当可能有许多这样的页面时,最好立即预见这个选项,并创建一个全局只读变量来存储页面的列表。
接下来,你需要创建业务流程本身(让我们称它为 Set NavItem Visibility)来控制导航菜单项的可见性。
- Expand User.关于用户角色的信息.
- In Array.要检查给定的用户是否在 Admins组中。
- For each loop.要对全局变量中指定的所有页面运行循环。
- NavItem Update Properties.控制一个元素的可见性,取决于用户是否是管理员。
创建的业务流程的块必须在进入主页之前添加在登录和用户注册按钮的业务流程中(以前。 Set Variable块被添加到它们中,以记录有关当前用户信息的变量)。
通过直接链接进行访问控制
最后要做的是设置一个业务流程,在每次应用程序启动时由"On app launch"触发器启动时执行的业务流程。和上一步一样,添加 Set NavItems Visibility块,用于认证的用户。
此外,有必要提供保护,防止通过直接链接访问一个封闭的页面。
- In Array (Admin_pages).检查目标页面是否在管理员专用页面的列表中。
- If-Else.根据检查的结果来决定行动的可变性。如果 False,你可以导航到指定的页面。在的情况下 True,则需要额外检查是否有权访问该页面。
- Expand User.要从全局变量中读取用户信息 User_gv.
- In Array.检查Admins 组中的成员资格。
- If-Else.根据管理权限的存在或不存在来选择行动。
- Navigate.当没有相应权限的用户试图打开一个只为管理员准备的页面时,转到所需的页面或重定向到起始页面。
选定的页面现在被保护起来,防止未经授权的访问。在没有权限的情况下,它们不会显示在菜单中,即使通过直接链接也不能被访问。
必须记住,对某些页面的访问保护并不意味着对可以在这些页面上使用的端点的自动保护。要做到这一点,如果有必要,在 Middleware Token Auth设置中,你需要指定对所选端点有访问权的用户组。