PDA

View Full Version : Role Provider



sara_swan
یک شنبه 17 اردیبهشت 1391, 17:28 عصر
با سلام
دوستان من میخواستم با ROLE PROVIDER کار کنم یعنی یه کلاسی داشته باشم که از اون inherit شده باشه و Authorization بر اساس اون انجام بشه
کسی میتونه راهنمایی کنه؟

bahareh1368
یک شنبه 17 اردیبهشت 1391, 20:10 عصر
با سلام
دوستان من میخواستم با ROLE PROVIDER کار کنم یعنی یه کلاسی داشته باشم که از اون inherit شده باشه و Authorization بر اساس اون انجام بشه
کسی میتونه راهنمایی کنه؟
اگه میخواهی این Role Provider رو حودت بنویسی و مدیریت کنی اول یه کلاس باید ایجاد کنی که از کلاس RoleProvider دات نت ارث بری کنه و اینترفیس هایشو ایجاد کنی(اینکار با کلیک روی خط آبی رنگی که زیر RoleProvider میاد انجام میشه) سپس در متد GetRolesForUser برای اینکه بتونی معین کنی در هر بار چه کسی لاگین گرده و عملیاتی رو انجام میده کد زیر رو بنویسی. این کلاسیه که من نوشتم :


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;

namespace MySample
{
public class MySampleRoleProvider : RoleProvider
{
public override void AddUsersToRoles(string[] usernames, string[] roleNames)
{
throw new NotImplementedException();
}

public override string ApplicationName
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}

public override void CreateRole(string roleName)
{
throw new NotImplementedException();
}

public override bool DeleteRole(string roleName, bool throwOnPopulatedRole)
{
throw new NotImplementedException();
}

public override string[] FindUsersInRole(string roleName, string usernameToMatch)
{
throw new NotImplementedException();
}

public override string[] GetAllRoles()
{
throw new NotImplementedException();
}

public override string[] GetRolesForUser(string username)
{
string[] rolesList = (from u in DataContext.Context.Users
join r in DataContext.Context.Roles on u.RoleID equals r.RoleID
where u.Username == username
select r.RoleNameInSystem).ToArray();
return rolesList;
}

public override string[] GetUsersInRole(string roleName)
{
throw new NotImplementedException();
}

public override bool IsUserInRole(string username, string roleName)
{
throw new NotImplementedException();
}

public override void RemoveUsersFromRoles(string[] usernames, string[] roleNames)
{
throw new NotImplementedException();
}

public override bool RoleExists(string roleName)
{
throw new NotImplementedException();
}
}
}


اما کار اینجا تموم نمیشه.کار اصلی تنظیمات وب کانفیگه.اول باید Provider دات نت رو از کار بندازی و سپس Provider خودت رو معرفی کنی. اینطوری :


<roleManager enabled="true" defaultProvider="ٰTest">
<providers>
<clear />
<add name="ٰTest" type="MySample.eShopRoleProvider" />
</providers>


اگه سوالی داشتی بپرس تا بیشتر توضیح بدم

sara_swan
پنج شنبه 21 اردیبهشت 1391, 17:14 عصر
سلام دوست عزیز و با تشکر از جوابتون

من چند تا سوال درباره کدتون داشتم ممنون میشم اگر راهنمایی بفرمایید.
یکی درمورد type هستش که eShopRoleProvider رو کجا تعریف کردیم و کاربردش چیه؟
و بعد اینکه عملکرد تابع GetRolesForUser چه جوریه؟ یعنی role یوزر رو از کجا میخونه و با چی مقایسه میکنه؟من اگر بخوام از Databese ، اطلاعات مربوط به role یوزر رو بخونم باید تو همین تابع این کار رو انجام بدم درسته؟
و بقیه توابع کلاس roleProvider رو لازمه که Override بکنم؟

مرسی