unity3d 虚拟现实的操作权限设计
在进行 Unity3D 虚拟现实相关操作时,基础设置至关重要,其中操作权限设计是一个重要内容。本文将详细介绍 Unity3D 虚拟现实操作权限的设计内容,包括代码实现及相关逻辑。
权限设计代码示例
1. 控制器部分(HomeController)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WebUI.ActionFilter;
namespace WebUI.Controllers
{
[HandleError]
public class HomeController : Controller
{
[UserAuthorize(
Roles = new string[] { "Admin" },
UserID = new string[] { "Admin" }
)]
public ActionResult Index()
{
ViewData["Message"] = "IndexAction";
return View();
}
// Action 级别下参数过滤
[FilterByUserInfo(
Roles = new string[] { "Admin" }
)]
public ActionResult Manage(string Modual)
{
ViewData["Message"] = "Manage Action";
return View();
}
}
}
在上述代码中,HomeController 包含两个方法:Index 和 Manage。Index 方法使用了 UserAuthorize 特性进行权限验证,要求用户角色为 Admin 且用户 ID 为 Admin。Manage 方法使用了 FilterByUserInfo 特性,在 UserAuthorize 验证的基础上,还会进行额外的参数验证。
2. 模拟数据初始化方法
private void initMockData()
{
var mock = new Mock<IUserRepository<SysUser>>();
var roleList = new List<UserRole>()
{
new UserRole()
{
Id = 1,
RoleName = "Register"
}
// 可根据需要添加更多角色
// new UserRole()
// {
// Id = 2,
// RoleName = "Admin"
// }
};
mock.Setup(m => m.findByUserID("HuntSoul"))
.Returns(
new SysUser()
{
Id = 1,
UserID = "HuntSoul",
UserPwd = "654321",
NickName = "BackDoor", // UI Modual,用于 ACTION 参数验证用的。
Roles = roleList
}
);
_Repository = mock.Object;
}
initMockData 方法用于初始化模拟数据,创建了一个模拟的用户仓库 Mock<IUserRepository<SysUser>>,并设置了用户信息和角色列表。
3. 用户授权特性(UserAuthorizeAttribute)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Domain;
namespace WebUI.ActionFilter
{
public class UserAuthorizeAttribute : ActionFilterAttribute
{
/// <summary>
/// 用户角色列表
/// </summary>
public string[] Roles { get; set; }
/// <summary>
/// 用户 ID 列表
/// </summary>
public string[] UserID { get; set; }
protected SysUser _User { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
_User = HttpContext.Current.Session["User"] as SysUser;
var rolesResult = from a in _User.Roles
from b in Roles
where a.RoleName.Equals(b)
select a;
var userIDResult = from a in new[] { _User.UserID }
from b in UserID
where a.Equals(b)
select a;
if (rolesResult.ToList().Count == 0 && userIDResult.ToList().Count == 0)
{
HttpContext.Current.Response.Write("Unauthorized");
HttpContext.Current.Response.End();
}
}
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
base.OnResultExecuted(filterContext);
}
}
}
UserAuthorizeAttribute 继承自 ActionFilterAttribute,用于在操作执行前进行权限验证。通过比较用户的角色和用户 ID 是否符合要求,若不符合则返回未授权信息并终止响应。
4. 用户信息过滤特性(FilterByUserInfoAttribute)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace WebUI.ActionFilter
{
public class FilterByUserInfoAttribute : UserAuthorizeAttribute
{
public override void OnActionExecuting(System.Web.Mvc.ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
var moduel = filterContext.RouteData.Values["id"]?.ToString();
if (_User.NickName != moduel)
{
HttpContext.Current.Response.Write("Invalid Module");
HttpContext.Current.Response.End();
}
}
public override void OnActionExecuted(System.Web.Mvc.ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
}
}
}
FilterByUserInfoAttribute 继承自 UserAuthorizeAttribute,在 UserAuthorizeAttribute 的基础上,还会验证用户的昵称是否与路由参数中的 id 一致,若不一致则返回无效模块信息并终止响应。
总结
以上就是 Unity3D 虚拟现实操作权限设计的具体操作流程和相关代码实现。在学习过程中,如果遇到疑惑,可以直接查看 Unity3D 虚拟现实相关资料进行学习和了解。