全部家产拿出来向诸位高手请教一个Membership中的profile 以及 权限控制的问题!
1,就是当我的网站里面有好几个角色的时候,比如。老师和学生;那么老师的属性肯定和学生的属性不一样,那么这个时候我再添加信息的时候如何来区分不同的用户添加不同的profile呢?然后同样的是读取,修改信息的问题!2,就是我用Membership控制权限的时候,如果我现在有一个功能目录的xml文件,这个功能目录自然是对应的我项目里面的文件夹目录,那么我如何通过Membership来控制这个功能目录的xml文件,当我哪种角色的用户进来的时候,就显示该角色所有用的功能目录。
3,就是Membership能否做到,我控制某个具体的功能,比如,我添加,删除这两个功能分别赋予两种不同的角色!这该如何去做?
我的qq:411545730
--------------------编程问答-------------------- 不是很明白
帮顶 --------------------编程问答-------------------- Member role组件 --------------------编程问答-------------------- --------------------编程问答-------------------- 我们一般是这样做的,角色,权限,用户
用户有一个角色,角色有权限
然后判断每个操作的权限
--------------------编程问答-------------------- 如果用自带成员角色管理要用Vs自动生成的数据库。感觉不方便,所以也没用。就用了Form验证。
权限管理这块我还是用Session控制的。 --------------------编程问答-------------------- if (User.IsInRole("Administrators"))
Administrators是一个角色,是在成员资格中定义的角色,也可以是
if (User.IsInRole("Teachers"))
或
if (User.IsInRole("Students"))
--------------------编程问答-------------------- 那里有Membership下 --------------------编程问答-------------------- 以下是我的新书开发大全中的章节,正好与楼主第3条有关
private void BindData()
{
DataTable dataTable = new DataTable();
dataTable.Columns.Add("UserName", typeof(System.String));
dataTable.Columns.Add("City", typeof(System.String));
dataTable.Columns.Add("Sex", typeof(System.String));
dataTable.Columns.Add("BirthDay", typeof(System.DateTime));
dataTable.Columns.Add("MSN", typeof(System.String));
dataTable.Columns.Add("Address", typeof(System.String));
dataTable.Columns.Add("Mobile", typeof(System.String));
dataTable.Columns.Add("Phone", typeof(System.String));
ProfileCommon profile = null;
DataRow dataRow = null;
//遍历当前所有用户
foreach (MembershipUser user in Membership.GetAllUsers())
{
dataRow = dataTable.NewRow();
dataRow["UserName"] = user.UserName;
//获取指定用户Profile
profile = Profile.GetProfile(user.UserName);
dataRow["City"] = profile.City;
dataRow["Sex"] = profile.Sex;
dataRow["BirthDay"] = profile.BirthDay;
dataRow["MSN"] = profile.MSN;
dataRow["Address"] = profile.Address;
dataRow["Mobile"] = profile.Communication.Mobile;
dataRow["Phone"] = profile.Communication.Phone;
dataTable.Rows.Add(dataRow);
}
GridView1.DataSource = dataTable;
GridView1.DataBind();
}
Personalize个性化事件在ASP.NET获取与当前请求关联(如会话状态)时发生,在应用程序的Globa.asax文件中的Profile_Personalize全局事件中,可以使用ProfileModule类的Personalize事件。Personalize事件用于指定自定义用户配置文件。
假设一个系统中定义了Administrators、Users和Guests这三个角色,每个角色拥有的权限大小不一样,Administrators>Users>Guests,系统可能有成千上万个用户,不可能为每个用户都定义权限,给用户定义角色是最方便的选择。每个角色的权限存储在一个用户的Profile配置文件中,例如Administrators角色的权限存储在Administrator用户的Profile配置中。在Profile_Personalize全局事件中,根据角色将指定的用户(例如Adminstrator用户)Profile配置取出,赋予当前用户,具体的步骤如下:
1.添加角色和用户
可以使用网站管理工具添加Administrators、Uses、和Guests这三个角色,在网站管理工具中选择“安全→创建或管理角色”进行角色添加,如图21.10所示。
图20.10 为系统添加角色
选择“安全→创建用户”,创建Administrator、User和Guest这三个角色,如图20.11所示。
图20.11 为系统创建用户
2.为Profile添加字段
在web.config中的<properties>节点中添加两个字段,一个是权限名称,一个是权限级别,如下:
<properties>
<add name="PowerName" type="System.String"/>
<add name="PowerLevel" type="System.String"/>
</properties>
3.为新增的用户设置权限
在应用程序中添加一个页面,为页面添加三个DropDownList,分别是用户名称、角色名称和权限级别,分别为administrator、User、Guest添加角色名称和权限级别,如图20.12所示。
图20.12 设置用户的角色和权限级别
4.定义Profile_Personalize事件
在Global.asax文件中添加Profile_Personalize事件如下:
public void Profile_Personalize(object sender, ProfileEventArgs args)
{
ProfileCommon userProfile;
if (User == null) { return; }
userProfile = (ProfileCommon)ProfileBase.Create(User.Identity.Name);
if (User.IsInRole("Administrators"))
userProfile = userProfile.GetProfile("Administrator");
else
if (User.IsInRole("Users"))
userProfile = userProfile.GetProfile("User");
else
userProfile = userProfile.GetProfile("Guest");
if (userProfile != null)
args.Profile = userProfile;
}
在页面的Page_Load事件中的代码如下:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
Response.Write(string.Format("欢迎您:{0}<br />您的角色是:{1}<br />您的权限是:{2}<br/>",User.Identity.Name,Profile.PowerName,Profile.PowerLevel));
}
}
下面可以测试一下效果,例如为名为jack的用户分配Administrators角色,然后使用jack用户名登录系统,输出结果如图20.13所示。
图20.13 jack登录系统
--------------------编程问答-------------------- 楼主应该好好看看MSDN的文章了~~{从开头开,你就会对BS有更多的了解}
补充:.NET技术 , ASP.NET