یعنی زمانی که من دارم یه کاربر را اد میکنم به جدول این فیلد هم جزء اون جدول هست و باید مقدار دهی بشه!! چجوری مقدار دهی نکنم مدیر فقط مقدار دهی کنه ؟ مگه میشه همچین چیزی؟
یه کم بد متوجه شدی. ببین
وقتی یه کاربری ثبت نام میکنه این فیلد به صورت پیش فرض برای اون کاربر true میشه. این true پیش فرض توی دستور اینزرت وجود داره. یعنی همین که اکانت کاربر ایجاد شد ، همون لحظه فعال هم مشه و کاربر میتونه ازش استفاده کنه (تو این حالت احتیاجی به ایمیل فعال سازی نداره). حالا فرض کن به هر علتی این یوزر بعد از یه مدت میخواد غیر فعال بشه (مثلا به دلیل رعایت نکرد قوانین سایت) خوب اون کسی که یوزر رو غیر فعال میکنه کیه؟ خوب معلومه دیگه. مدیر سایت از طریق پنل مدیریت خودش این فیلد رو false میکنه و اون اکانت غیر فعال میشه. خود کاربر بعد از فعال شدن اکانتش نقشی تو فعال یا غیر فعال کردن مجدد اکانت خودش نداره
خانم z_bluestar
بازم سپاس گذارم، یه سوال دیگه داشتم.
من الان Login میکنم و هیچ مشکلی ندارم، حالا برای سطح دسترسی من یه تیبل به نام Role طبق روشی که گفتید ساختم،الان نمیدونم چطور میشه از طریق این تیبل سطح دسترسی رو معین کنم.
اگر راهنمایی کنید ممنون میشم.
با تشکر
البته سوالتون از من نبود ولی با این حال... تو حالتی که از جداول ممبر شیپ توی دیتابیس خودتون استفاده میکنید اول یه همچین RoleManager ای رو به فایل web.config اضافه میکنید
<roleManager defaultProvider="SqlProvider"
enabled="true"
cacheRolesInCookie="true"
cookieName=".ASPROLES"
cookieTimeout="30"
cookiePath="/"
cookieRequireSSL="false"
cookieSlidingExpiration="true"
cookieProtection="All" >
<providers>
<add
name="SqlProvider"
type="System.Web.Security.SqlRoleProvider"
connectionStringName="SqlServices"
applicationName="/" />
</providers>
</roleManager>
اون SqlServices اسم کانکشن استرینگی هست که تو فایل web.config تعریف شده و نشون میده رول مورد نظر رو چه دیتابیسی اعمال میشه
بعد موقع ایجاد یه یوزر Role مورد نظر رو برای اون یوزر تعیین میکنید. فرض کنید قراره یه کاربر نقش مدیریتی داشته یاشه. ستاره های پایین جهت یادآوریه تیکه کد زیر تو قسمتهای انتهای این پست هستش
***
if (!Roles.RoleExists("Admin"))
Roles.CreateRole("Admin");
Roles.AddUserToRole(UsernameTextbox.Text, "Admin");
ممبر شیپ از 2 تا جدول واسه نگهداری رولها و رولهایی که به کاربران داده شده استفاده میکنه
اولی جدول aspnet_Roles هستش که اسکریپت سازندش اینه
USE [MemberShip]
GO
/****** Object: Table [dbo].[aspnet_Roles] Script Date: 06/10/2010 15:03:58 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[aspnet_Roles](
[ApplicationId] [uniqueidentifier] NOT NULL,
[RoleId] [uniqueidentifier] NOT NULL,
[RoleName] [nvarchar](256) NOT NULL,
[LoweredRoleName] [nvarchar](256) NOT NULL,
[Description] [nvarchar](256) NULL,
PRIMARY KEY NONCLUSTERED
(
[RoleId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[aspnet_Roles] WITH CHECK ADD FOREIGN KEY([ApplicationId])
REFERENCES [dbo].[aspnet_Applications] ([ApplicationId])
GO
ALTER TABLE [dbo].[aspnet_Roles] ADD DEFAULT (newid()) FOR [RoleId]
GO
و جدول aspnet_UsersInRoles که اسکریپت سازنده اون هم میشه این
USE [MemberShip]
GO
/****** Object: Table [dbo].[aspnet_UsersInRoles] Script Date: 06/10/2010 15:06:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[aspnet_UsersInRoles](
[UserId] [uniqueidentifier] NOT NULL,
[RoleId] [uniqueidentifier] NOT NULL,
PRIMARY KEY CLUSTERED
(
[UserId] ASC,
[RoleId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[aspnet_UsersInRoles] WITH CHECK ADD FOREIGN KEY([RoleId])
REFERENCES [dbo].[aspnet_Roles] ([RoleId])
GO
ALTER TABLE [dbo].[aspnet_UsersInRoles] WITH CHECK ADD FOREIGN KEY([UserId])
REFERENCES [dbo].[aspnet_Users] ([UserId])
GO
3 خط کدی رو که زیر ستاره ها نوشتم که یادتون هست. وقتی دو خط اول اجرا میشه در صورتی که رول مورد نظر تو جدول aspnet_Roles وجود نداشته باشه ، اون رول ایجاد میشه و با اجرای خط سوم یه سطر هم یه جدول aspnet_UsersInRoles اضافه میشه که اون رول رو به کاربر مورد نظر اختصاص میده
بعد از این تو هر صفحه ای که خواستیم رول کاربری که لاگین کرده رو پیدا کنیم از این استفاده میکنیم
مثلا تو لود صفحه
if (User.IsInRole("MasterAdmin"))
{
}
else if (User.IsInRole("Admin"))
{
}
else
{
// Normal User
}
فعلا تا اینجاشو داشته باشید تا بعد